En este documento se mostraran los resultados del clasificador K-NN usando diferentes K. También se hará una análisis del algoritmo K-Means con el dataset nums.csv.
Para no hacer el documento muy extenso se han implementado las funciones de test en un archivo llamado utils.py.
En está practica, se han usado ambos tipos de validaciones, cruzada y simple. En concreto, con la validación cruzada se usan los valores K: 4, 6, 8, 10. Para la validación simple se usán valores para el %: 25, 20, 15, 10.
Para evitar empates con los datos, los valores que se usan en el clasificador K-NN son siempre impares.
from Distancias import distanciaEuclidea
from Datos import Datos
import utils
import KMeans
import MatrizConfusion as MC
import matplotlib.pyplot as plt
# Cargamos datos
pima = Datos("ConjuntosDatosP2Knn/pima-indians-diabetes.data")
wdbc = Datos("ConjuntosDatosP2Knn/wdbc.data")
nums = Datos("ConjuntosDatosP2KMeans/nums.csv")
errorMedioPimaVC, errorMedioPimaVS, errorMedioWDBCVC, errorMedioWDBCVS = utils.knn_test(pima, wdbc)
Test K=1 K-NN SIN NORMALIZAR Pima - Error WDBC - Error Validación Simple 25% 0.348958 0.378521 Validación Cruzada K-Folds=4 0.403646 0.371479 Validación Simple 20% 0.345098 0.387611 Validación Cruzada K-Folds=6 0.348958 0.372340 Validación Simple 15% 0.391304 0.368627 Validación Cruzada K-Folds=8 0.348958 0.371479 Validación Simple 10% 0.336842 0.394643 Validación Cruzada K-Folds=10 0.375000 0.373214 ================================================================================ Test K=3 K-NN SIN NORMALIZAR Pima - Error WDBC - Error Validación Simple 25% 0.361979 0.357394 Validación Cruzada K-Folds=4 0.348958 0.371479 Validación Simple 20% 0.363399 0.392920 Validación Cruzada K-Folds=6 0.348958 0.375887 Validación Simple 15% 0.363768 0.403922 Validación Cruzada K-Folds=8 0.348958 0.373239 Validación Simple 10% 0.381579 0.367857 Validación Cruzada K-Folds=10 0.347368 0.376786 ================================================================================ Test K=5 K-NN SIN NORMALIZAR Pima - Error WDBC - Error Validación Simple 25% 0.338542 0.362676 Validación Cruzada K-Folds=4 0.348958 0.373239 Validación Simple 20% 0.354248 0.352212 Validación Cruzada K-Folds=6 0.348958 0.370567 Validación Simple 15% 0.336232 0.364706 Validación Cruzada K-Folds=8 0.348958 0.371479 Validación Simple 10% 0.321053 0.357143 Validación Cruzada K-Folds=10 0.347368 0.373214 ================================================================================ Test K=7 K-NN SIN NORMALIZAR Pima - Error WDBC - Error Validación Simple 25% 0.355469 0.385563 Validación Cruzada K-Folds=4 0.348958 0.371479 Validación Simple 20% 0.367320 0.362832 Validación Cruzada K-Folds=6 0.348958 0.372340 Validación Simple 15% 0.352174 0.341176 Validación Cruzada K-Folds=8 0.348958 0.373239 Validación Simple 10% 0.356579 0.367857 Validación Cruzada K-Folds=10 0.348684 0.371429 ================================================================================ Test K=9 K-NN SIN NORMALIZAR Pima - Error WDBC - Error Validación Simple 25% 0.329427 0.375000 Validación Cruzada K-Folds=4 0.348958 0.373239 Validación Simple 20% 0.335948 0.350442 Validación Cruzada K-Folds=6 0.348958 0.375887 Validación Simple 15% 0.357971 0.394118 Validación Cruzada K-Folds=8 0.348958 0.373239 Validación Simple 10% 0.343421 0.314286 Validación Cruzada K-Folds=10 0.350000 0.375000 ================================================================================ Test K=11 K-NN SIN NORMALIZAR Pima - Error WDBC - Error Validación Simple 25% 0.332031 0.345070 Validación Cruzada K-Folds=4 0.348958 0.373239 Validación Simple 20% 0.360784 0.369912 Validación Cruzada K-Folds=6 0.348958 0.374113 Validación Simple 15% 0.363768 0.380392 Validación Cruzada K-Folds=8 0.348958 0.373239 Validación Simple 10% 0.384211 0.378571 Validación Cruzada K-Folds=10 0.346053 0.369643 ================================================================================ Test K=13 K-NN SIN NORMALIZAR Pima - Error WDBC - Error Validación Simple 25% 0.351562 0.367958 Validación Cruzada K-Folds=4 0.348958 0.373239 Validación Simple 20% 0.350327 0.364602 Validación Cruzada K-Folds=6 0.348958 0.372340 Validación Simple 15% 0.353623 0.343137 Validación Cruzada K-Folds=8 0.348958 0.371479 Validación Simple 10% 0.332895 0.357143 Validación Cruzada K-Folds=10 0.348684 0.367857 ================================================================================ Test K=15 K-NN SIN NORMALIZAR Pima - Error WDBC - Error Validación Simple 25% 0.351562 0.355634 Validación Cruzada K-Folds=4 0.348958 0.373239 Validación Simple 20% 0.366013 0.396460 Validación Cruzada K-Folds=6 0.348958 0.372340 Validación Simple 15% 0.365217 0.403922 Validación Cruzada K-Folds=8 0.348958 0.371479 Validación Simple 10% 0.330263 0.391071 Validación Cruzada K-Folds=10 0.348684 0.375000 ================================================================================ Test K=17 K-NN SIN NORMALIZAR Pima - Error WDBC - Error Validación Simple 25% 0.356771 0.362676 Validación Cruzada K-Folds=4 0.348958 0.373239 Validación Simple 20% 0.350327 0.382301 Validación Cruzada K-Folds=6 0.348958 0.370567 Validación Simple 15% 0.352174 0.339216 Validación Cruzada K-Folds=8 0.348958 0.373239 Validación Simple 10% 0.334211 0.371429 Validación Cruzada K-Folds=10 0.348684 0.369643 ================================================================================ Test K=19 K-NN SIN NORMALIZAR Pima - Error WDBC - Error Validación Simple 25% 0.348958 0.382042 Validación Cruzada K-Folds=4 0.348958 0.373239 Validación Simple 20% 0.364706 0.371681 Validación Cruzada K-Folds=6 0.348958 0.374113 Validación Simple 15% 0.362319 0.394118 Validación Cruzada K-Folds=8 0.348958 0.371479 Validación Simple 10% 0.355263 0.389286 Validación Cruzada K-Folds=10 0.348684 0.373214 ================================================================================ Test K=21 K-NN SIN NORMALIZAR Pima - Error WDBC - Error Validación Simple 25% 0.354167 0.376761 Validación Cruzada K-Folds=4 0.348958 0.373239 Validación Simple 20% 0.351634 0.389381 Validación Cruzada K-Folds=6 0.348958 0.372340 Validación Simple 15% 0.366667 0.400000 Validación Cruzada K-Folds=8 0.348958 0.373239 Validación Simple 10% 0.352632 0.369643 Validación Cruzada K-Folds=10 0.350000 0.371429 ================================================================================ Test K=23 K-NN SIN NORMALIZAR Pima - Error WDBC - Error Validación Simple 25% 0.361979 0.364437 Validación Cruzada K-Folds=4 0.348958 0.373239 Validación Simple 20% 0.354248 0.366372 Validación Cruzada K-Folds=6 0.348958 0.374113 Validación Simple 15% 0.350725 0.382353 Validación Cruzada K-Folds=8 0.348958 0.371479 Validación Simple 10% 0.384211 0.380357 Validación Cruzada K-Folds=10 0.347368 0.375000 ================================================================================ Test K=25 K-NN SIN NORMALIZAR Pima - Error WDBC - Error Validación Simple 25% 0.342448 0.359155 Validación Cruzada K-Folds=4 0.348958 0.371479 Validación Simple 20% 0.354248 0.380531 Validación Cruzada K-Folds=6 0.348958 0.368794 Validación Simple 15% 0.363768 0.343137 Validación Cruzada K-Folds=8 0.348958 0.371479 Validación Simple 10% 0.340789 0.350000 Validación Cruzada K-Folds=10 0.350000 0.376786 ================================================================================ Test K=27 K-NN SIN NORMALIZAR Pima - Error WDBC - Error Validación Simple 25% 0.355469 0.389085 Validación Cruzada K-Folds=4 0.348958 0.373239 Validación Simple 20% 0.351634 0.378761 Validación Cruzada K-Folds=6 0.348958 0.372340 Validación Simple 15% 0.344928 0.370588 Validación Cruzada K-Folds=8 0.348958 0.373239 Validación Simple 10% 0.343421 0.369643 Validación Cruzada K-Folds=10 0.347368 0.371429 ================================================================================ Test K=29 K-NN SIN NORMALIZAR Pima - Error WDBC - Error Validación Simple 25% 0.346354 0.382042 Validación Cruzada K-Folds=4 0.348958 0.373239 Validación Simple 20% 0.359477 0.392920 Validación Cruzada K-Folds=6 0.348958 0.372340 Validación Simple 15% 0.339130 0.384314 Validación Cruzada K-Folds=8 0.348958 0.373239 Validación Simple 10% 0.355263 0.378571 Validación Cruzada K-Folds=10 0.347368 0.373214 ================================================================================ Test K=31 K-NN SIN NORMALIZAR Pima - Error WDBC - Error Validación Simple 25% 0.345052 0.382042 Validación Cruzada K-Folds=4 0.348958 0.371479 Validación Simple 20% 0.367320 0.385841 Validación Cruzada K-Folds=6 0.348958 0.372340 Validación Simple 15% 0.346377 0.362745 Validación Cruzada K-Folds=8 0.348958 0.373239 Validación Simple 10% 0.346053 0.410714 Validación Cruzada K-Folds=10 0.344737 0.375000 ================================================================================ Test K=33 K-NN SIN NORMALIZAR Pima - Error WDBC - Error Validación Simple 25% 0.371094 0.364437 Validación Cruzada K-Folds=4 0.348958 0.373239 Validación Simple 20% 0.347712 0.382301 Validación Cruzada K-Folds=6 0.348958 0.370567 Validación Simple 15% 0.334783 0.400000 Validación Cruzada K-Folds=8 0.348958 0.373239 Validación Simple 10% 0.369737 0.367857 Validación Cruzada K-Folds=10 0.348684 0.369643 ================================================================================ Test K=35 K-NN SIN NORMALIZAR Pima - Error WDBC - Error Validación Simple 25% 0.332031 0.369718 Validación Cruzada K-Folds=4 0.348958 0.371479 Validación Simple 20% 0.326797 0.392920 Validación Cruzada K-Folds=6 0.348958 0.372340 Validación Simple 15% 0.331884 0.378431 Validación Cruzada K-Folds=8 0.348958 0.371479 Validación Simple 10% 0.355263 0.389286 Validación Cruzada K-Folds=10 0.346053 0.369643 ================================================================================
errorMedioPimaVCNorm, errorMedioPimaVSNorm, errorMedioWDBCVCNorm, errorMedioWDBCVSNorm = utils.knn_test_norm(pima, wdbc)
Test K=1 K-NN NORMALIZANDO Pima - Error WDBC - Error Validación Simple 25% 0.352865 0.357394 Validación Cruzada K-Folds=4 0.348958 0.371479 Validación Simple 20% 0.343791 0.359292 Validación Cruzada K-Folds=6 0.348958 0.374113 Validación Simple 15% 0.342029 0.368627 Validación Cruzada K-Folds=8 0.348958 0.373239 Validación Simple 10% 0.332895 0.383929 Validación Cruzada K-Folds=10 0.347368 0.371429 ================================================================================ Test K=3 K-NN NORMALIZANDO Pima - Error WDBC - Error Validación Simple 25% 0.372396 0.387324 Validación Cruzada K-Folds=4 0.348958 0.371479 Validación Simple 20% 0.351634 0.361062 Validación Cruzada K-Folds=6 0.348958 0.370567 Validación Simple 15% 0.334783 0.360784 Validación Cruzada K-Folds=8 0.348958 0.371479 Validación Simple 10% 0.365789 0.385714 Validación Cruzada K-Folds=10 0.346053 0.375000 ================================================================================ Test K=5 K-NN NORMALIZANDO Pima - Error WDBC - Error Validación Simple 25% 0.358073 0.366197 Validación Cruzada K-Folds=4 0.348958 0.371479 Validación Simple 20% 0.347712 0.366372 Validación Cruzada K-Folds=6 0.348958 0.372340 Validación Simple 15% 0.375362 0.407843 Validación Cruzada K-Folds=8 0.348958 0.373239 Validación Simple 10% 0.336842 0.375000 Validación Cruzada K-Folds=10 0.343421 0.369643 ================================================================================ Test K=7 K-NN NORMALIZANDO Pima - Error WDBC - Error Validación Simple 25% 0.324219 0.334507 Validación Cruzada K-Folds=4 0.348958 0.373239 Validación Simple 20% 0.342484 0.355752 Validación Cruzada K-Folds=6 0.348958 0.374113 Validación Simple 15% 0.373913 0.360784 Validación Cruzada K-Folds=8 0.348958 0.373239 Validación Simple 10% 0.363158 0.378571 Validación Cruzada K-Folds=10 0.348684 0.375000 ================================================================================ Test K=9 K-NN NORMALIZANDO Pima - Error WDBC - Error Validación Simple 25% 0.339844 0.404930 Validación Cruzada K-Folds=4 0.348958 0.373239 Validación Simple 20% 0.389542 0.345133 Validación Cruzada K-Folds=6 0.348958 0.372340 Validación Simple 15% 0.315942 0.364706 Validación Cruzada K-Folds=8 0.348958 0.373239 Validación Simple 10% 0.344737 0.382143 Validación Cruzada K-Folds=10 0.348684 0.376786 ================================================================================ Test K=11 K-NN NORMALIZANDO Pima - Error WDBC - Error Validación Simple 25% 0.345052 0.382042 Validación Cruzada K-Folds=4 0.348958 0.373239 Validación Simple 20% 0.330719 0.352212 Validación Cruzada K-Folds=6 0.348958 0.372340 Validación Simple 15% 0.353623 0.347059 Validación Cruzada K-Folds=8 0.348958 0.373239 Validación Simple 10% 0.350000 0.367857 Validación Cruzada K-Folds=10 0.348684 0.373214 ================================================================================ Test K=13 K-NN NORMALIZANDO Pima - Error WDBC - Error Validación Simple 25% 0.367188 0.352113 Validación Cruzada K-Folds=4 0.348958 0.371479 Validación Simple 20% 0.368627 0.373451 Validación Cruzada K-Folds=6 0.348958 0.372340 Validación Simple 15% 0.347826 0.380392 Validación Cruzada K-Folds=8 0.348958 0.373239 Validación Simple 10% 0.328947 0.371429 Validación Cruzada K-Folds=10 0.344737 0.373214 ================================================================================ Test K=15 K-NN NORMALIZANDO Pima - Error WDBC - Error Validación Simple 25% 0.372396 0.343310 Validación Cruzada K-Folds=4 0.348958 0.373239 Validación Simple 20% 0.358170 0.403540 Validación Cruzada K-Folds=6 0.348958 0.374113 Validación Simple 15% 0.355072 0.360784 Validación Cruzada K-Folds=8 0.348958 0.371479 Validación Simple 10% 0.342105 0.344643 Validación Cruzada K-Folds=10 0.350000 0.371429 ================================================================================ Test K=17 K-NN NORMALIZANDO Pima - Error WDBC - Error Validación Simple 25% 0.347656 0.360915 Validación Cruzada K-Folds=4 0.348958 0.373239 Validación Simple 20% 0.345098 0.394690 Validación Cruzada K-Folds=6 0.348958 0.374113 Validación Simple 15% 0.342029 0.366667 Validación Cruzada K-Folds=8 0.348958 0.371479 Validación Simple 10% 0.330263 0.364286 Validación Cruzada K-Folds=10 0.347368 0.369643 ================================================================================ Test K=19 K-NN NORMALIZANDO Pima - Error WDBC - Error Validación Simple 25% 0.348958 0.376761 Validación Cruzada K-Folds=4 0.348958 0.373239 Validación Simple 20% 0.333333 0.338053 Validación Cruzada K-Folds=6 0.348958 0.375887 Validación Simple 15% 0.375362 0.366667 Validación Cruzada K-Folds=8 0.348958 0.371479 Validación Simple 10% 0.307895 0.412500 Validación Cruzada K-Folds=10 0.348684 0.375000 ================================================================================ Test K=21 K-NN NORMALIZANDO Pima - Error WDBC - Error Validación Simple 25% 0.354167 0.367958 Validación Cruzada K-Folds=4 0.348958 0.373239 Validación Simple 20% 0.368627 0.343363 Validación Cruzada K-Folds=6 0.348958 0.370567 Validación Simple 15% 0.349275 0.372549 Validación Cruzada K-Folds=8 0.348958 0.371479 Validación Simple 10% 0.340789 0.360714 Validación Cruzada K-Folds=10 0.350000 0.369643 ================================================================================ Test K=23 K-NN NORMALIZANDO Pima - Error WDBC - Error Validación Simple 25% 0.338542 0.352113 Validación Cruzada K-Folds=4 0.348958 0.373239 Validación Simple 20% 0.369935 0.371681 Validación Cruzada K-Folds=6 0.348958 0.372340 Validación Simple 15% 0.360870 0.376471 Validación Cruzada K-Folds=8 0.348958 0.373239 Validación Simple 10% 0.359211 0.391071 Validación Cruzada K-Folds=10 0.350000 0.373214 ================================================================================ Test K=25 K-NN NORMALIZANDO Pima - Error WDBC - Error Validación Simple 25% 0.329427 0.364437 Validación Cruzada K-Folds=4 0.348958 0.371479 Validación Simple 20% 0.358170 0.357522 Validación Cruzada K-Folds=6 0.348958 0.370567 Validación Simple 15% 0.353623 0.376471 Validación Cruzada K-Folds=8 0.348958 0.371479 Validación Simple 10% 0.346053 0.355357 Validación Cruzada K-Folds=10 0.344737 0.369643 ================================================================================ Test K=27 K-NN NORMALIZANDO Pima - Error WDBC - Error Validación Simple 25% 0.348958 0.376761 Validación Cruzada K-Folds=4 0.348958 0.373239 Validación Simple 20% 0.324183 0.407080 Validación Cruzada K-Folds=6 0.348958 0.372340 Validación Simple 15% 0.339130 0.370588 Validación Cruzada K-Folds=8 0.348958 0.373239 Validación Simple 10% 0.327632 0.382143 Validación Cruzada K-Folds=10 0.348684 0.375000 ================================================================================ Test K=29 K-NN NORMALIZANDO Pima - Error WDBC - Error Validación Simple 25% 0.359375 0.375000 Validación Cruzada K-Folds=4 0.348958 0.373239 Validación Simple 20% 0.341176 0.385841 Validación Cruzada K-Folds=6 0.348958 0.374113 Validación Simple 15% 0.315942 0.378431 Validación Cruzada K-Folds=8 0.348958 0.371479 Validación Simple 10% 0.332895 0.366071 Validación Cruzada K-Folds=10 0.348684 0.375000 ================================================================================ Test K=31 K-NN NORMALIZANDO Pima - Error WDBC - Error Validación Simple 25% 0.339844 0.359155 Validación Cruzada K-Folds=4 0.348958 0.373239 Validación Simple 20% 0.372549 0.371681 Validación Cruzada K-Folds=6 0.348958 0.372340 Validación Simple 15% 0.326087 0.376471 Validación Cruzada K-Folds=8 0.348958 0.373239 Validación Simple 10% 0.355263 0.389286 Validación Cruzada K-Folds=10 0.347368 0.373214 ================================================================================ Test K=33 K-NN NORMALIZANDO Pima - Error WDBC - Error Validación Simple 25% 0.358073 0.382042 Validación Cruzada K-Folds=4 0.348958 0.371479 Validación Simple 20% 0.355556 0.401770 Validación Cruzada K-Folds=6 0.348958 0.370567 Validación Simple 15% 0.350725 0.343137 Validación Cruzada K-Folds=8 0.348958 0.371479 Validación Simple 10% 0.350000 0.358929 Validación Cruzada K-Folds=10 0.350000 0.375000 ================================================================================ Test K=35 K-NN NORMALIZANDO Pima - Error WDBC - Error Validación Simple 25% 0.332031 0.367958 Validación Cruzada K-Folds=4 0.348958 0.373239 Validación Simple 20% 0.308497 0.382301 Validación Cruzada K-Folds=6 0.348958 0.370567 Validación Simple 15% 0.368116 0.407843 Validación Cruzada K-Folds=8 0.348958 0.373239 Validación Simple 10% 0.360526 0.383929 Validación Cruzada K-Folds=10 0.350000 0.367857 ================================================================================
utils.plot_VS(errorMedioPimaVS, errorMedioPimaVSNorm)
En un primer vistazo a los datos, podemos asumir que la normalización de los datos no influye en gran medida al error del clasificador. Una de las razones de esto puede ser simplemente que la normalización no es necesaria ya que los propios datos no necesiten ser normalizados. También podemos ver que los valores para diferentes porcentajes de la validación simple no influyen en gran medida, ya que el error está siempre entre 0.32 y 0.39.
En cuanto a K, se ven picos cuando K es extremadamente pequeño (con valores 1 y 3) pero mientras aumentamos K podemos ver el error se "estabiliza" quedandose entre los 0.32 y 0.36. La cosa es que a medida que aumenta, no se aprecia una gran mejora, es por eso que los valores donde mejor clasifica el modelo están entre K=3 y K=7, aunque se pueden ver errores bajos cuando K está entre K=11 y K=15.
utils.plot_VC(errorMedioPimaVC, errorMedioPimaVCNorm)
La validación cruzada presenta un comportamiento extraño y es que el error no varía independientemente del valor de K, es cierto que hay un pico en K=1, pero a parte de eso, no hay ningún cambio. Todo esto cambia cuando se usa un valor de K (con respecto a la validación cruzada) de 10, ahí los errores si que varían.
De estás gráficas podemos llegar a la conclusión de que el normalizar el dataset Pima-Indians-Diabetes no es quizás la mejor idea, ya que devuevle el mismo resulatdo que sin normalizar.
No resulta buena idea normalizar los datos y usar la validación cruzada para comparar los errores con respecto al valor de K tampoco es la mejor idea.
Lo que si que podemos decir es que usar K=1 (con respecto a K-NN) no tiene ningún sentido y esto se puede ver en las tablas, el error suele ser alto. Los valores donde el modelo mejor clasifica están entre 3-7 y 11-15.
utils.plot_VS(errorMedioWDBCVS, errorMedioWDBCVSNorm)
utils.plot_VC(errorMedioWDBCVC, errorMedioWDBCVCNorm)
En este dataset podemos ver que ocurren cosas muy similares a las que ocurren en el anterior dataset. Lo primero es que el error es muy parecido aunque ligeramente superior, 0.36-0.38.
En la validación cruzada no ocurre lo mismo que antes pero siguen pasando cosas raras, vemos que en 2 gráficas, los valores del error, unicaménte varian entre 2 posibles valores. En las otras 2 gráficas vemos variación aunque, como se dijo anteriormente, el hecho de usar la normalización no implica ninguna mejora.
En cuanto a los valores de K, estos dan un mejor resultado cuando están entre K=11 y K=17.
En este apartado vamos a ver el comportamiento de K-Means sobre el dataset nums. Vamos a ver la matriz de confusión generada para cada cluster, para esto se usarán histogramas para verlo de forma más visual.
Hay que tener en cuenta que en este dataset tenemos números del 0 al 9. En el mejor de los casos los clusters tendrían datos de un único tipo y no habría ni falsos positivos, ni falsos negativos.
Los clusters contienen una clase mayoritaria, esa clase se considerá la clase del cluster.
matrices_propia_10, centroides_propia_10 = utils.test_KMeans(10, nums)
utils.tablas_matriz_confusion(matrices_propia_10)
Cluster 1 - Clase mayoritaria '6' Positivos-Negativos +-------+-------+ Verdaderos + 31 + 390 + +-------+-------+ Falsos + 42 + 17 + +-------+-------+ Especificidad: 0.9027777777777778 Exactitud: 0.8770833333333333 Sensibilidad: 0.6458333333333334 Precisión: 0.4246575342465753 Cluster 2 - Clase mayoritaria '7' Positivos-Negativos +-------+-------+ Verdaderos + 7 + 412 + +-------+-------+ Falsos + 20 + 41 + +-------+-------+ Especificidad: 0.9537037037037037 Exactitud: 0.8729166666666667 Sensibilidad: 0.14583333333333334 Precisión: 0.25925925925925924 Cluster 3 - Clase mayoritaria '1' Positivos-Negativos +-------+-------+ Verdaderos + 36 + 403 + +-------+-------+ Falsos + 29 + 12 + +-------+-------+ Especificidad: 0.9328703703703703 Exactitud: 0.9145833333333333 Sensibilidad: 0.75 Precisión: 0.5538461538461539 Cluster 4 - Clase mayoritaria '8' Positivos-Negativos +-------+-------+ Verdaderos + 19 + 417 + +-------+-------+ Falsos + 15 + 29 + +-------+-------+ Especificidad: 0.9652777777777778 Exactitud: 0.9083333333333333 Sensibilidad: 0.3958333333333333 Precisión: 0.5588235294117647 Cluster 5 - Clase mayoritaria '7' Positivos-Negativos +-------+-------+ Verdaderos + 28 + 429 + +-------+-------+ Falsos + 3 + 20 + +-------+-------+ Especificidad: 0.9930555555555556 Exactitud: 0.9520833333333333 Sensibilidad: 0.5833333333333334 Precisión: 0.9032258064516129 Cluster 6 - Clase mayoritaria '9' Positivos-Negativos +-------+-------+ Verdaderos + 19 + 389 + +-------+-------+ Falsos + 43 + 29 + +-------+-------+ Especificidad: 0.9004629629629629 Exactitud: 0.85 Sensibilidad: 0.3958333333333333 Precisión: 0.3064516129032258 Cluster 7 - Clase mayoritaria '2' Positivos-Negativos +-------+-------+ Verdaderos + 28 + 422 + +-------+-------+ Falsos + 10 + 20 + +-------+-------+ Especificidad: 0.9768518518518519 Exactitud: 0.9375 Sensibilidad: 0.5833333333333334 Precisión: 0.7368421052631579 Cluster 8 - Clase mayoritaria '0' Positivos-Negativos +-------+-------+ Verdaderos + 20 + 432 + +-------+-------+ Falsos + 0 + 28 + +-------+-------+ Especificidad: 1.0 Exactitud: 0.9416666666666667 Sensibilidad: 0.4166666666666667 Precisión: 1.0 Cluster 9 - Clase mayoritaria '4' Positivos-Negativos +-------+-------+ Verdaderos + 36 + 406 + +-------+-------+ Falsos + 26 + 12 + +-------+-------+ Especificidad: 0.9398148148148148 Exactitud: 0.9208333333333333 Sensibilidad: 0.75 Precisión: 0.5806451612903226 Cluster 10 - Clase mayoritaria '3' Positivos-Negativos +-------+-------+ Verdaderos + 34 + 398 + +-------+-------+ Falsos + 34 + 14 + +-------+-------+ Especificidad: 0.9212962962962963 Exactitud: 0.9 Sensibilidad: 0.7083333333333334 Precisión: 0.5
Lo primero que vemos dados los datos es que no hay ningún cluster cuya clase mayoritaria sea el 5. Esto puede ser porque el 5 se parezca mucho a otro número y en otro cluster haya falsos positivos que sean 5.
El hecho de que no esté el 5 como clase mayoritaria en ningún cluster significa que hay otro número que se parezca a este que en 2 clusters sea la clase mayoritaria, este número es el 7. El número 7 está en los clusters 2 y 5. Podemos suponer que uno de estos contiene varios falsos positivos, aunque también pueden estar repartidos entre los mismos clusters. Sorprendentemente hay clusters como el 6 que tienen bastantes más falsos positivos que los clusters 2 y 5, esto puede ser porque no haya tantos 3's y 5's en el dataset, mientras que el número 1 (clase mayoritaria del cluster 10), esté muy presente en el dataset.
Aunque no haya varios falsos positivos, lo que si que hay son muy pocos verdaderos positivos en el cluster 2, unicamente 7, este es un número muy bajo.
En cuanto a la matriz de confusión, se va a discutir cada uno de los valores (verdadero positivo, verdadero...):
Al fijarnos unicamente en un dato de la matriz no es correcto llegar a una conclusión de cada número, se hace unicamente de manera orientativa.
Aunque haya 10 números en el dataset, es necesario que la cantidad de cada uno de estos sea uniforme para que quizás, el algoritmo de K-Means haga clusters los cuales contengan un número diferente cada uno.
Hay que tener en cuenta que cada ejecución que se hace, se cambian los valores y puede pasar que todos estos números cambien.
Vamos ahora a "clusterizar" el dataset con valores mayores de 10. Lo ideal sería que se arreglase el problema de la ausencia del 5 como clase mayoritaria en uno de los clusters.
matrices, _ = utils.test_KMeans(11, nums)
utils.tablas_matriz_confusion(matrices)
Cluster 1 - Clase mayoritaria '3' Positivos-Negativos +-------+-------+ Verdaderos + 37 + 400 + +-------+-------+ Falsos + 32 + 11 + +-------+-------+ Especificidad: 0.9259259259259259 Exactitud: 0.9104166666666667 Sensibilidad: 0.7708333333333334 Precisión: 0.5362318840579711 Cluster 2 - Clase mayoritaria '0' Positivos-Negativos +-------+-------+ Verdaderos + 12 + 425 + +-------+-------+ Falsos + 7 + 36 + +-------+-------+ Especificidad: 0.9837962962962963 Exactitud: 0.9104166666666667 Sensibilidad: 0.25 Precisión: 0.631578947368421 Cluster 3 - Clase mayoritaria '8' Positivos-Negativos +-------+-------+ Verdaderos + 26 + 417 + +-------+-------+ Falsos + 15 + 22 + +-------+-------+ Especificidad: 0.9652777777777778 Exactitud: 0.9229166666666667 Sensibilidad: 0.5416666666666666 Precisión: 0.6341463414634146 Cluster 4 - Clase mayoritaria '6' Positivos-Negativos +-------+-------+ Verdaderos + 32 + 414 + +-------+-------+ Falsos + 18 + 16 + +-------+-------+ Especificidad: 0.9583333333333334 Exactitud: 0.9291666666666667 Sensibilidad: 0.6666666666666666 Precisión: 0.64 Cluster 5 - Clase mayoritaria '4' Positivos-Negativos +-------+-------+ Verdaderos + 42 + 399 + +-------+-------+ Falsos + 33 + 6 + +-------+-------+ Especificidad: 0.9236111111111112 Exactitud: 0.91875 Sensibilidad: 0.875 Precisión: 0.56 Cluster 6 - Clase mayoritaria '7' Positivos-Negativos +-------+-------+ Verdaderos + 31 + 419 + +-------+-------+ Falsos + 13 + 17 + +-------+-------+ Especificidad: 0.9699074074074074 Exactitud: 0.9375 Sensibilidad: 0.6458333333333334 Precisión: 0.7045454545454546 Cluster 7 - Clase mayoritaria '2' Positivos-Negativos +-------+-------+ Verdaderos + 7 + 414 + +-------+-------+ Falsos + 18 + 41 + +-------+-------+ Especificidad: 0.9583333333333334 Exactitud: 0.8770833333333333 Sensibilidad: 0.14583333333333334 Precisión: 0.28 Cluster 8 - Clase mayoritaria '1' Positivos-Negativos +-------+-------+ Verdaderos + 25 + 405 + +-------+-------+ Falsos + 27 + 23 + +-------+-------+ Especificidad: 0.9375 Exactitud: 0.8958333333333334 Sensibilidad: 0.5208333333333334 Precisión: 0.4807692307692308 Cluster 9 - Clase mayoritaria '0' Positivos-Negativos +-------+-------+ Verdaderos + 28 + 431 + +-------+-------+ Falsos + 1 + 20 + +-------+-------+ Especificidad: 0.9976851851851852 Exactitud: 0.95625 Sensibilidad: 0.5833333333333334 Precisión: 0.9655172413793104 Cluster 10 - Clase mayoritaria '2' Positivos-Negativos +-------+-------+ Verdaderos + 27 + 427 + +-------+-------+ Falsos + 5 + 21 + +-------+-------+ Especificidad: 0.9884259259259259 Exactitud: 0.9458333333333333 Sensibilidad: 0.5625 Precisión: 0.84375 Cluster 11 - Clase mayoritaria '1' Positivos-Negativos +-------+-------+ Verdaderos + 14 + 402 + +-------+-------+ Falsos + 30 + 34 + +-------+-------+ Especificidad: 0.9305555555555556 Exactitud: 0.8666666666666667 Sensibilidad: 0.2916666666666667 Precisión: 0.3181818181818182
matrices, _ = utils.test_KMeans(12, nums)
utils.tablas_matriz_confusion(matrices)
Cluster 1 - Clase mayoritaria '1' Positivos-Negativos +-------+-------+ Verdaderos + 20 + 417 + +-------+-------+ Falsos + 15 + 28 + +-------+-------+ Especificidad: 0.9652777777777778 Exactitud: 0.9104166666666667 Sensibilidad: 0.4166666666666667 Precisión: 0.5714285714285714 Cluster 2 - Clase mayoritaria '0' Positivos-Negativos +-------+-------+ Verdaderos + 22 + 432 + +-------+-------+ Falsos + 0 + 26 + +-------+-------+ Especificidad: 1.0 Exactitud: 0.9458333333333333 Sensibilidad: 0.4583333333333333 Precisión: 1.0 Cluster 3 - Clase mayoritaria '1' Positivos-Negativos +-------+-------+ Verdaderos + 11 + 383 + +-------+-------+ Falsos + 49 + 37 + +-------+-------+ Especificidad: 0.8865740740740741 Exactitud: 0.8208333333333333 Sensibilidad: 0.22916666666666666 Precisión: 0.18333333333333332 Cluster 4 - Clase mayoritaria '2' Positivos-Negativos +-------+-------+ Verdaderos + 31 + 427 + +-------+-------+ Falsos + 5 + 17 + +-------+-------+ Especificidad: 0.9884259259259259 Exactitud: 0.9541666666666667 Sensibilidad: 0.6458333333333334 Precisión: 0.8611111111111112 Cluster 5 - Clase mayoritaria '6' Positivos-Negativos +-------+-------+ Verdaderos + 19 + 418 + +-------+-------+ Falsos + 14 + 29 + +-------+-------+ Especificidad: 0.9675925925925926 Exactitud: 0.9104166666666667 Sensibilidad: 0.3958333333333333 Precisión: 0.5757575757575758 Cluster 6 - Clase mayoritaria '9' Positivos-Negativos +-------+-------+ Verdaderos + 34 + 403 + +-------+-------+ Falsos + 29 + 14 + +-------+-------+ Especificidad: 0.9328703703703703 Exactitud: 0.9104166666666667 Sensibilidad: 0.7083333333333334 Precisión: 0.5396825396825397 Cluster 7 - Clase mayoritaria '7' Positivos-Negativos +-------+-------+ Verdaderos + 32 + 427 + +-------+-------+ Falsos + 5 + 16 + +-------+-------+ Especificidad: 0.9884259259259259 Exactitud: 0.95625 Sensibilidad: 0.6666666666666666 Precisión: 0.8648648648648649 Cluster 8 - Clase mayoritaria '6' Positivos-Negativos +-------+-------+ Verdaderos + 22 + 426 + +-------+-------+ Falsos + 6 + 26 + +-------+-------+ Especificidad: 0.9861111111111112 Exactitud: 0.9333333333333333 Sensibilidad: 0.4583333333333333 Precisión: 0.7857142857142857 Cluster 9 - Clase mayoritaria '5' Positivos-Negativos +-------+-------+ Verdaderos + 14 + 416 + +-------+-------+ Falsos + 16 + 34 + +-------+-------+ Especificidad: 0.9629629629629629 Exactitud: 0.8958333333333334 Sensibilidad: 0.2916666666666667 Precisión: 0.4666666666666667 Cluster 10 - Clase mayoritaria '8' Positivos-Negativos +-------+-------+ Verdaderos + 21 + 420 + +-------+-------+ Falsos + 12 + 27 + +-------+-------+ Especificidad: 0.9722222222222222 Exactitud: 0.91875 Sensibilidad: 0.4375 Precisión: 0.6363636363636364 Cluster 11 - Clase mayoritaria '4' Positivos-Negativos +-------+-------+ Verdaderos + 17 + 407 + +-------+-------+ Falsos + 25 + 31 + +-------+-------+ Especificidad: 0.9421296296296297 Exactitud: 0.8833333333333333 Sensibilidad: 0.3541666666666667 Precisión: 0.40476190476190477 Cluster 12 - Clase mayoritaria '3' Positivos-Negativos +-------+-------+ Verdaderos + 31 + 402 + +-------+-------+ Falsos + 30 + 17 + +-------+-------+ Especificidad: 0.9305555555555556 Exactitud: 0.9020833333333333 Sensibilidad: 0.6458333333333334 Precisión: 0.5081967213114754
Finalmente se reconoce el 5.
matrices, _ = utils.test_KMeans(13, nums)
utils.tablas_matriz_confusion(matrices)
Cluster 1 - Clase mayoritaria '6' Positivos-Negativos +-------+-------+ Verdaderos + 13 + 387 + +-------+-------+ Falsos + 45 + 35 + +-------+-------+ Especificidad: 0.8958333333333334 Exactitud: 0.8333333333333334 Sensibilidad: 0.2708333333333333 Precisión: 0.22413793103448276 Cluster 2 - Clase mayoritaria '6' Positivos-Negativos +-------+-------+ Verdaderos + 32 + 415 + +-------+-------+ Falsos + 17 + 16 + +-------+-------+ Especificidad: 0.9606481481481481 Exactitud: 0.93125 Sensibilidad: 0.6666666666666666 Precisión: 0.6530612244897959 Cluster 3 - Clase mayoritaria '4' Positivos-Negativos +-------+-------+ Verdaderos + 38 + 390 + +-------+-------+ Falsos + 42 + 10 + +-------+-------+ Especificidad: 0.9027777777777778 Exactitud: 0.8916666666666667 Sensibilidad: 0.7916666666666666 Precisión: 0.475 Cluster 4 - Clase mayoritaria '3' Positivos-Negativos +-------+-------+ Verdaderos + 2 + 427 + +-------+-------+ Falsos + 5 + 46 + +-------+-------+ Especificidad: 0.9884259259259259 Exactitud: 0.89375 Sensibilidad: 0.041666666666666664 Precisión: 0.2857142857142857 Cluster 5 - Clase mayoritaria '8' Positivos-Negativos +-------+-------+ Verdaderos + 19 + 423 + +-------+-------+ Falsos + 9 + 29 + +-------+-------+ Especificidad: 0.9791666666666666 Exactitud: 0.9208333333333333 Sensibilidad: 0.3958333333333333 Precisión: 0.6785714285714286 Cluster 6 - Clase mayoritaria '1' Positivos-Negativos +-------+-------+ Verdaderos + 33 + 420 + +-------+-------+ Falsos + 12 + 15 + +-------+-------+ Especificidad: 0.9722222222222222 Exactitud: 0.94375 Sensibilidad: 0.6875 Precisión: 0.7333333333333333 Cluster 7 - Clase mayoritaria '0' Positivos-Negativos +-------+-------+ Verdaderos + 15 + 432 + +-------+-------+ Falsos + 0 + 33 + +-------+-------+ Especificidad: 1.0 Exactitud: 0.93125 Sensibilidad: 0.3125 Precisión: 1.0 Cluster 8 - Clase mayoritaria '7' Positivos-Negativos +-------+-------+ Verdaderos + 36 + 424 + +-------+-------+ Falsos + 8 + 12 + +-------+-------+ Especificidad: 0.9814814814814815 Exactitud: 0.9583333333333334 Sensibilidad: 0.75 Precisión: 0.8181818181818182 Cluster 9 - Clase mayoritaria '3' Positivos-Negativos +-------+-------+ Verdaderos + 20 + 407 + +-------+-------+ Falsos + 25 + 28 + +-------+-------+ Especificidad: 0.9421296296296297 Exactitud: 0.8895833333333333 Sensibilidad: 0.4166666666666667 Precisión: 0.4444444444444444 Cluster 10 - Clase mayoritaria '0' Positivos-Negativos +-------+-------+ Verdaderos + 25 + 423 + +-------+-------+ Falsos + 9 + 23 + +-------+-------+ Especificidad: 0.9791666666666666 Exactitud: 0.9333333333333333 Sensibilidad: 0.5208333333333334 Precisión: 0.7352941176470589 Cluster 11 - Clase mayoritaria '2' Positivos-Negativos +-------+-------+ Verdaderos + 31 + 427 + +-------+-------+ Falsos + 5 + 17 + +-------+-------+ Especificidad: 0.9884259259259259 Exactitud: 0.9541666666666667 Sensibilidad: 0.6458333333333334 Precisión: 0.8611111111111112 Cluster 12 - Clase mayoritaria '3' Positivos-Negativos +-------+-------+ Verdaderos + 20 + 419 + +-------+-------+ Falsos + 13 + 28 + +-------+-------+ Especificidad: 0.9699074074074074 Exactitud: 0.9145833333333333 Sensibilidad: 0.4166666666666667 Precisión: 0.6060606060606061 Cluster 13 - Clase mayoritaria '0' Positivos-Negativos +-------+-------+ Verdaderos + 6 + 432 + +-------+-------+ Falsos + 0 + 42 + +-------+-------+ Especificidad: 1.0 Exactitud: 0.9125 Sensibilidad: 0.125 Precisión: 1.0
matrices, _ = utils.test_KMeans(14, nums)
utils.tablas_matriz_confusion(matrices)
Cluster 1 - Clase mayoritaria '5' Positivos-Negativos +-------+-------+ Verdaderos + 6 + 425 + +-------+-------+ Falsos + 7 + 42 + +-------+-------+ Especificidad: 0.9837962962962963 Exactitud: 0.8979166666666667 Sensibilidad: 0.125 Precisión: 0.46153846153846156 Cluster 2 - Clase mayoritaria '1' Positivos-Negativos +-------+-------+ Verdaderos + 36 + 399 + +-------+-------+ Falsos + 33 + 12 + +-------+-------+ Especificidad: 0.9236111111111112 Exactitud: 0.90625 Sensibilidad: 0.75 Precisión: 0.5217391304347826 Cluster 3 - Clase mayoritaria '2' Positivos-Negativos +-------+-------+ Verdaderos + 11 + 429 + +-------+-------+ Falsos + 3 + 37 + +-------+-------+ Especificidad: 0.9930555555555556 Exactitud: 0.9166666666666666 Sensibilidad: 0.22916666666666666 Precisión: 0.7857142857142857 Cluster 4 - Clase mayoritaria '2' Positivos-Negativos +-------+-------+ Verdaderos + 17 + 406 + +-------+-------+ Falsos + 26 + 31 + +-------+-------+ Especificidad: 0.9398148148148148 Exactitud: 0.88125 Sensibilidad: 0.3541666666666667 Precisión: 0.3953488372093023 Cluster 5 - Clase mayoritaria '3' Positivos-Negativos +-------+-------+ Verdaderos + 6 + 421 + +-------+-------+ Falsos + 11 + 42 + +-------+-------+ Especificidad: 0.9745370370370371 Exactitud: 0.8895833333333333 Sensibilidad: 0.125 Precisión: 0.35294117647058826 Cluster 6 - Clase mayoritaria '8' Positivos-Negativos +-------+-------+ Verdaderos + 20 + 419 + +-------+-------+ Falsos + 13 + 28 + +-------+-------+ Especificidad: 0.9699074074074074 Exactitud: 0.9145833333333333 Sensibilidad: 0.4166666666666667 Precisión: 0.6060606060606061 Cluster 7 - Clase mayoritaria '8' Positivos-Negativos +-------+-------+ Verdaderos + 9 + 426 + +-------+-------+ Falsos + 6 + 39 + +-------+-------+ Especificidad: 0.9861111111111112 Exactitud: 0.90625 Sensibilidad: 0.1875 Precisión: 0.6 Cluster 8 - Clase mayoritaria '9' Positivos-Negativos +-------+-------+ Verdaderos + 30 + 423 + +-------+-------+ Falsos + 9 + 18 + +-------+-------+ Especificidad: 0.9791666666666666 Exactitud: 0.94375 Sensibilidad: 0.625 Precisión: 0.7692307692307693 Cluster 9 - Clase mayoritaria '6' Positivos-Negativos +-------+-------+ Verdaderos + 35 + 426 + +-------+-------+ Falsos + 6 + 13 + +-------+-------+ Especificidad: 0.9861111111111112 Exactitud: 0.9604166666666667 Sensibilidad: 0.7291666666666666 Precisión: 0.8536585365853658 Cluster 10 - Clase mayoritaria '3' Positivos-Negativos +-------+-------+ Verdaderos + 29 + 405 + +-------+-------+ Falsos + 27 + 19 + +-------+-------+ Especificidad: 0.9375 Exactitud: 0.9041666666666667 Sensibilidad: 0.6041666666666666 Precisión: 0.5178571428571429 Cluster 11 - Clase mayoritaria '0' Positivos-Negativos +-------+-------+ Verdaderos + 10 + 432 + +-------+-------+ Falsos + 0 + 38 + +-------+-------+ Especificidad: 1.0 Exactitud: 0.9208333333333333 Sensibilidad: 0.20833333333333334 Precisión: 1.0 Cluster 12 - Clase mayoritaria '4' Positivos-Negativos +-------+-------+ Verdaderos + 38 + 418 + +-------+-------+ Falsos + 14 + 10 + +-------+-------+ Especificidad: 0.9675925925925926 Exactitud: 0.95 Sensibilidad: 0.7916666666666666 Precisión: 0.7307692307692307 Cluster 13 - Clase mayoritaria '7' Positivos-Negativos +-------+-------+ Verdaderos + 11 + 392 + +-------+-------+ Falsos + 40 + 37 + +-------+-------+ Especificidad: 0.9074074074074074 Exactitud: 0.8395833333333333 Sensibilidad: 0.22916666666666666 Precisión: 0.21568627450980393 Cluster 14 - Clase mayoritaria '0' Positivos-Negativos +-------+-------+ Verdaderos + 25 + 430 + +-------+-------+ Falsos + 2 + 23 + +-------+-------+ Especificidad: 0.9953703703703703 Exactitud: 0.9479166666666666 Sensibilidad: 0.5208333333333334 Precisión: 0.9259259259259259
matrices, _ = utils.test_KMeans(15, nums)
utils.tablas_matriz_confusion(matrices)
Cluster 1 - Clase mayoritaria '6' Positivos-Negativos +-------+-------+ Verdaderos + 27 + 419 + +-------+-------+ Falsos + 13 + 21 + +-------+-------+ Especificidad: 0.9699074074074074 Exactitud: 0.9291666666666667 Sensibilidad: 0.5625 Precisión: 0.675 Cluster 2 - Clase mayoritaria '9' Positivos-Negativos +-------+-------+ Verdaderos + 20 + 428 + +-------+-------+ Falsos + 4 + 28 + +-------+-------+ Especificidad: 0.9907407407407407 Exactitud: 0.9333333333333333 Sensibilidad: 0.4166666666666667 Precisión: 0.8333333333333334 Cluster 3 - Clase mayoritaria '3' Positivos-Negativos +-------+-------+ Verdaderos + 25 + 404 + +-------+-------+ Falsos + 28 + 23 + +-------+-------+ Especificidad: 0.9351851851851852 Exactitud: 0.89375 Sensibilidad: 0.5208333333333334 Precisión: 0.4716981132075472 Cluster 4 - Clase mayoritaria '1' Positivos-Negativos +-------+-------+ Verdaderos + 17 + 407 + +-------+-------+ Falsos + 25 + 31 + +-------+-------+ Especificidad: 0.9421296296296297 Exactitud: 0.8833333333333333 Sensibilidad: 0.3541666666666667 Precisión: 0.40476190476190477 Cluster 5 - Clase mayoritaria '8' Positivos-Negativos +-------+-------+ Verdaderos + 13 + 419 + +-------+-------+ Falsos + 13 + 35 + +-------+-------+ Especificidad: 0.9699074074074074 Exactitud: 0.9 Sensibilidad: 0.2708333333333333 Precisión: 0.5 Cluster 6 - Clase mayoritaria '2' Positivos-Negativos +-------+-------+ Verdaderos + 29 + 426 + +-------+-------+ Falsos + 6 + 19 + +-------+-------+ Especificidad: 0.9861111111111112 Exactitud: 0.9479166666666666 Sensibilidad: 0.6041666666666666 Precisión: 0.8285714285714286 Cluster 7 - Clase mayoritaria '1' Positivos-Negativos +-------+-------+ Verdaderos + 10 + 413 + +-------+-------+ Falsos + 19 + 38 + +-------+-------+ Especificidad: 0.9560185185185185 Exactitud: 0.88125 Sensibilidad: 0.20833333333333334 Precisión: 0.3448275862068966 Cluster 8 - Clase mayoritaria '3' Positivos-Negativos +-------+-------+ Verdaderos + 13 + 421 + +-------+-------+ Falsos + 11 + 35 + +-------+-------+ Especificidad: 0.9745370370370371 Exactitud: 0.9041666666666667 Sensibilidad: 0.2708333333333333 Precisión: 0.5416666666666666 Cluster 9 - Clase mayoritaria '0' Positivos-Negativos +-------+-------+ Verdaderos + 21 + 432 + +-------+-------+ Falsos + 0 + 27 + +-------+-------+ Especificidad: 1.0 Exactitud: 0.94375 Sensibilidad: 0.4375 Precisión: 1.0 Cluster 10 - Clase mayoritaria '8' Positivos-Negativos +-------+-------+ Verdaderos + 6 + 426 + +-------+-------+ Falsos + 6 + 42 + +-------+-------+ Especificidad: 0.9861111111111112 Exactitud: 0.9 Sensibilidad: 0.125 Precisión: 0.5 Cluster 11 - Clase mayoritaria '1' Positivos-Negativos +-------+-------+ Verdaderos + 15 + 402 + +-------+-------+ Falsos + 30 + 33 + +-------+-------+ Especificidad: 0.9305555555555556 Exactitud: 0.86875 Sensibilidad: 0.3125 Precisión: 0.3333333333333333 Cluster 12 - Clase mayoritaria '4' Positivos-Negativos +-------+-------+ Verdaderos + 32 + 421 + +-------+-------+ Falsos + 11 + 16 + +-------+-------+ Especificidad: 0.9745370370370371 Exactitud: 0.94375 Sensibilidad: 0.6666666666666666 Precisión: 0.7441860465116279 Cluster 13 - Clase mayoritaria '7' Positivos-Negativos +-------+-------+ Verdaderos + 22 + 431 + +-------+-------+ Falsos + 1 + 26 + +-------+-------+ Especificidad: 0.9976851851851852 Exactitud: 0.94375 Sensibilidad: 0.4583333333333333 Precisión: 0.9565217391304348 Cluster 14 - Clase mayoritaria '7' Positivos-Negativos +-------+-------+ Verdaderos + 7 + 419 + +-------+-------+ Falsos + 13 + 41 + +-------+-------+ Especificidad: 0.9699074074074074 Exactitud: 0.8875 Sensibilidad: 0.14583333333333334 Precisión: 0.35 Cluster 15 - Clase mayoritaria '0' Positivos-Negativos +-------+-------+ Verdaderos + 25 + 414 + +-------+-------+ Falsos + 18 + 23 + +-------+-------+ Especificidad: 0.9583333333333334 Exactitud: 0.9145833333333333 Sensibilidad: 0.5208333333333334 Precisión: 0.5813953488372093
matrices, _ = utils.test_KMeans(16, nums)
utils.tablas_matriz_confusion(matrices)
Cluster 1 - Clase mayoritaria '1' Positivos-Negativos +-------+-------+ Verdaderos + 19 + 414 + +-------+-------+ Falsos + 18 + 29 + +-------+-------+ Especificidad: 0.9583333333333334 Exactitud: 0.9020833333333333 Sensibilidad: 0.3958333333333333 Precisión: 0.5135135135135135 Cluster 2 - Clase mayoritaria '2' Positivos-Negativos +-------+-------+ Verdaderos + 29 + 424 + +-------+-------+ Falsos + 8 + 19 + +-------+-------+ Especificidad: 0.9814814814814815 Exactitud: 0.94375 Sensibilidad: 0.6041666666666666 Precisión: 0.7837837837837838 Cluster 3 - Clase mayoritaria '4' Positivos-Negativos +-------+-------+ Verdaderos + 38 + 414 + +-------+-------+ Falsos + 18 + 10 + +-------+-------+ Especificidad: 0.9583333333333334 Exactitud: 0.9416666666666667 Sensibilidad: 0.7916666666666666 Precisión: 0.6785714285714286 Cluster 4 - Clase mayoritaria '0' Positivos-Negativos +-------+-------+ Verdaderos + 24 + 431 + +-------+-------+ Falsos + 1 + 24 + +-------+-------+ Especificidad: 0.9976851851851852 Exactitud: 0.9479166666666666 Sensibilidad: 0.5 Precisión: 0.96 Cluster 5 - Clase mayoritaria '1' Positivos-Negativos +-------+-------+ Verdaderos + 14 + 411 + +-------+-------+ Falsos + 21 + 34 + +-------+-------+ Especificidad: 0.9513888888888888 Exactitud: 0.8854166666666666 Sensibilidad: 0.2916666666666667 Precisión: 0.4 Cluster 6 - Clase mayoritaria '7' Positivos-Negativos +-------+-------+ Verdaderos + 3 + 432 + +-------+-------+ Falsos + 0 + 45 + +-------+-------+ Especificidad: 1.0 Exactitud: 0.90625 Sensibilidad: 0.0625 Precisión: 1.0 Cluster 7 - Clase mayoritaria '8' Positivos-Negativos +-------+-------+ Verdaderos + 8 + 414 + +-------+-------+ Falsos + 18 + 40 + +-------+-------+ Especificidad: 0.9583333333333334 Exactitud: 0.8791666666666667 Sensibilidad: 0.16666666666666666 Precisión: 0.3076923076923077 Cluster 8 - Clase mayoritaria '8' Positivos-Negativos +-------+-------+ Verdaderos + 8 + 407 + +-------+-------+ Falsos + 25 + 40 + +-------+-------+ Especificidad: 0.9421296296296297 Exactitud: 0.8645833333333334 Sensibilidad: 0.16666666666666666 Precisión: 0.24242424242424243 Cluster 9 - Clase mayoritaria '0' Positivos-Negativos +-------+-------+ Verdaderos + 12 + 432 + +-------+-------+ Falsos + 0 + 36 + +-------+-------+ Especificidad: 1.0 Exactitud: 0.925 Sensibilidad: 0.25 Precisión: 1.0 Cluster 10 - Clase mayoritaria '8' Positivos-Negativos +-------+-------+ Verdaderos + 7 + 430 + +-------+-------+ Falsos + 2 + 41 + +-------+-------+ Especificidad: 0.9953703703703703 Exactitud: 0.9104166666666667 Sensibilidad: 0.14583333333333334 Precisión: 0.7777777777777778 Cluster 11 - Clase mayoritaria '7' Positivos-Negativos +-------+-------+ Verdaderos + 14 + 422 + +-------+-------+ Falsos + 10 + 34 + +-------+-------+ Especificidad: 0.9768518518518519 Exactitud: 0.9083333333333333 Sensibilidad: 0.2916666666666667 Precisión: 0.5833333333333334 Cluster 12 - Clase mayoritaria '9' Positivos-Negativos +-------+-------+ Verdaderos + 22 + 427 + +-------+-------+ Falsos + 5 + 26 + +-------+-------+ Especificidad: 0.9884259259259259 Exactitud: 0.9354166666666667 Sensibilidad: 0.4583333333333333 Precisión: 0.8148148148148148 Cluster 13 - Clase mayoritaria '5' Positivos-Negativos +-------+-------+ Verdaderos + 12 + 411 + +-------+-------+ Falsos + 21 + 36 + +-------+-------+ Especificidad: 0.9513888888888888 Exactitud: 0.88125 Sensibilidad: 0.25 Precisión: 0.36363636363636365 Cluster 14 - Clase mayoritaria '6' Positivos-Negativos +-------+-------+ Verdaderos + 30 + 418 + +-------+-------+ Falsos + 14 + 18 + +-------+-------+ Especificidad: 0.9675925925925926 Exactitud: 0.9333333333333333 Sensibilidad: 0.625 Precisión: 0.6818181818181818 Cluster 15 - Clase mayoritaria '7' Positivos-Negativos +-------+-------+ Verdaderos + 17 + 430 + +-------+-------+ Falsos + 2 + 31 + +-------+-------+ Especificidad: 0.9953703703703703 Exactitud: 0.93125 Sensibilidad: 0.3541666666666667 Precisión: 0.8947368421052632 Cluster 16 - Clase mayoritaria '3' Positivos-Negativos +-------+-------+ Verdaderos + 31 + 403 + +-------+-------+ Falsos + 29 + 17 + +-------+-------+ Especificidad: 0.9328703703703703 Exactitud: 0.9041666666666667 Sensibilidad: 0.6458333333333334 Precisión: 0.5166666666666667
Sorprendentemente aunque haya más clusters lo que sucede es que se repiten más números, provocando así que haya otros que no se reconozcan. En este caso el 8 se repite en 3 clusters.
matrices, _ = utils.test_KMeans(17, nums)
utils.tablas_matriz_confusion(matrices)
Cluster 1 - Clase mayoritaria '3' Positivos-Negativos +-------+-------+ Verdaderos + 29 + 423 + +-------+-------+ Falsos + 9 + 19 + +-------+-------+ Especificidad: 0.9791666666666666 Exactitud: 0.9416666666666667 Sensibilidad: 0.6041666666666666 Precisión: 0.7631578947368421 Cluster 2 - Clase mayoritaria '1' Positivos-Negativos +-------+-------+ Verdaderos + 16 + 411 + +-------+-------+ Falsos + 21 + 32 + +-------+-------+ Especificidad: 0.9513888888888888 Exactitud: 0.8895833333333333 Sensibilidad: 0.3333333333333333 Precisión: 0.43243243243243246 Cluster 3 - Clase mayoritaria '6' Positivos-Negativos +-------+-------+ Verdaderos + 31 + 419 + +-------+-------+ Falsos + 13 + 17 + +-------+-------+ Especificidad: 0.9699074074074074 Exactitud: 0.9375 Sensibilidad: 0.6458333333333334 Precisión: 0.7045454545454546 Cluster 4 - Clase mayoritaria '0' Positivos-Negativos +-------+-------+ Verdaderos + 15 + 432 + +-------+-------+ Falsos + 0 + 33 + +-------+-------+ Especificidad: 1.0 Exactitud: 0.93125 Sensibilidad: 0.3125 Precisión: 1.0 Cluster 5 - Clase mayoritaria '6' Positivos-Negativos +-------+-------+ Verdaderos + 14 + 401 + +-------+-------+ Falsos + 31 + 34 + +-------+-------+ Especificidad: 0.9282407407407407 Exactitud: 0.8645833333333334 Sensibilidad: 0.2916666666666667 Precisión: 0.3111111111111111 Cluster 6 - Clase mayoritaria '5' Positivos-Negativos +-------+-------+ Verdaderos + 19 + 422 + +-------+-------+ Falsos + 10 + 29 + +-------+-------+ Especificidad: 0.9768518518518519 Exactitud: 0.91875 Sensibilidad: 0.3958333333333333 Precisión: 0.6551724137931034 Cluster 7 - Clase mayoritaria '0' Positivos-Negativos +-------+-------+ Verdaderos + 27 + 426 + +-------+-------+ Falsos + 6 + 21 + +-------+-------+ Especificidad: 0.9861111111111112 Exactitud: 0.94375 Sensibilidad: 0.5625 Precisión: 0.8181818181818182 Cluster 8 - Clase mayoritaria '7' Positivos-Negativos +-------+-------+ Verdaderos + 18 + 414 + +-------+-------+ Falsos + 18 + 30 + +-------+-------+ Especificidad: 0.9583333333333334 Exactitud: 0.9 Sensibilidad: 0.375 Precisión: 0.5 Cluster 9 - Clase mayoritaria '7' Positivos-Negativos +-------+-------+ Verdaderos + 22 + 422 + +-------+-------+ Falsos + 10 + 26 + +-------+-------+ Especificidad: 0.9768518518518519 Exactitud: 0.925 Sensibilidad: 0.4583333333333333 Precisión: 0.6875 Cluster 10 - Clase mayoritaria '9' Positivos-Negativos +-------+-------+ Verdaderos + 17 + 430 + +-------+-------+ Falsos + 2 + 31 + +-------+-------+ Especificidad: 0.9953703703703703 Exactitud: 0.93125 Sensibilidad: 0.3541666666666667 Precisión: 0.8947368421052632 Cluster 11 - Clase mayoritaria '4' Positivos-Negativos +-------+-------+ Verdaderos + 16 + 430 + +-------+-------+ Falsos + 2 + 32 + +-------+-------+ Especificidad: 0.9953703703703703 Exactitud: 0.9291666666666667 Sensibilidad: 0.3333333333333333 Precisión: 0.8888888888888888 Cluster 12 - Clase mayoritaria '2' Positivos-Negativos +-------+-------+ Verdaderos + 26 + 428 + +-------+-------+ Falsos + 4 + 22 + +-------+-------+ Especificidad: 0.9907407407407407 Exactitud: 0.9458333333333333 Sensibilidad: 0.5416666666666666 Precisión: 0.8666666666666667 Cluster 13 - Clase mayoritaria '1' Positivos-Negativos +-------+-------+ Verdaderos + 13 + 417 + +-------+-------+ Falsos + 15 + 35 + +-------+-------+ Especificidad: 0.9652777777777778 Exactitud: 0.8958333333333334 Sensibilidad: 0.2708333333333333 Precisión: 0.4642857142857143 Cluster 14 - Clase mayoritaria '3' Positivos-Negativos +-------+-------+ Verdaderos + 5 + 431 + +-------+-------+ Falsos + 1 + 43 + +-------+-------+ Especificidad: 0.9976851851851852 Exactitud: 0.9083333333333333 Sensibilidad: 0.10416666666666667 Precisión: 0.8333333333333334 Cluster 15 - Clase mayoritaria '8' Positivos-Negativos +-------+-------+ Verdaderos + 19 + 421 + +-------+-------+ Falsos + 11 + 29 + +-------+-------+ Especificidad: 0.9745370370370371 Exactitud: 0.9166666666666666 Sensibilidad: 0.3958333333333333 Precisión: 0.6333333333333333 Cluster 16 - Clase mayoritaria '4' Positivos-Negativos +-------+-------+ Verdaderos + 9 + 424 + +-------+-------+ Falsos + 8 + 39 + +-------+-------+ Especificidad: 0.9814814814814815 Exactitud: 0.9020833333333333 Sensibilidad: 0.1875 Precisión: 0.5294117647058824 Cluster 17 - Clase mayoritaria '4' Positivos-Negativos +-------+-------+ Verdaderos + 14 + 423 + +-------+-------+ Falsos + 9 + 34 + +-------+-------+ Especificidad: 0.9791666666666666 Exactitud: 0.9104166666666667 Sensibilidad: 0.2916666666666667 Precisión: 0.6086956521739131
matrices, _ = utils.test_KMeans(18, nums)
utils.tablas_matriz_confusion(matrices)
Cluster 1 - Clase mayoritaria '1' Positivos-Negativos +-------+-------+ Verdaderos + 24 + 396 + +-------+-------+ Falsos + 36 + 24 + +-------+-------+ Especificidad: 0.9166666666666666 Exactitud: 0.875 Sensibilidad: 0.5 Precisión: 0.4 Cluster 2 - Clase mayoritaria '8' Positivos-Negativos +-------+-------+ Verdaderos + 8 + 426 + +-------+-------+ Falsos + 6 + 40 + +-------+-------+ Especificidad: 0.9861111111111112 Exactitud: 0.9041666666666667 Sensibilidad: 0.16666666666666666 Precisión: 0.5714285714285714 Cluster 3 - Clase mayoritaria '0' Positivos-Negativos +-------+-------+ Verdaderos + 21 + 431 + +-------+-------+ Falsos + 1 + 27 + +-------+-------+ Especificidad: 0.9976851851851852 Exactitud: 0.9416666666666667 Sensibilidad: 0.4375 Precisión: 0.9545454545454546 Cluster 4 - Clase mayoritaria '7' Positivos-Negativos +-------+-------+ Verdaderos + 20 + 416 + +-------+-------+ Falsos + 16 + 28 + +-------+-------+ Especificidad: 0.9629629629629629 Exactitud: 0.9083333333333333 Sensibilidad: 0.4166666666666667 Precisión: 0.5555555555555556 Cluster 5 - Clase mayoritaria '9' Positivos-Negativos +-------+-------+ Verdaderos + 21 + 427 + +-------+-------+ Falsos + 5 + 27 + +-------+-------+ Especificidad: 0.9884259259259259 Exactitud: 0.9333333333333333 Sensibilidad: 0.4375 Precisión: 0.8076923076923077 Cluster 6 - Clase mayoritaria '8' Positivos-Negativos +-------+-------+ Verdaderos + 23 + 428 + +-------+-------+ Falsos + 4 + 25 + +-------+-------+ Especificidad: 0.9907407407407407 Exactitud: 0.9395833333333333 Sensibilidad: 0.4791666666666667 Precisión: 0.8518518518518519 Cluster 7 - Clase mayoritaria '1' Positivos-Negativos +-------+-------+ Verdaderos + 15 + 407 + +-------+-------+ Falsos + 25 + 33 + +-------+-------+ Especificidad: 0.9421296296296297 Exactitud: 0.8791666666666667 Sensibilidad: 0.3125 Precisión: 0.375 Cluster 8 - Clase mayoritaria '7' Positivos-Negativos +-------+-------+ Verdaderos + 19 + 431 + +-------+-------+ Falsos + 1 + 29 + +-------+-------+ Especificidad: 0.9976851851851852 Exactitud: 0.9375 Sensibilidad: 0.3958333333333333 Precisión: 0.95 Cluster 9 - Clase mayoritaria '0' Positivos-Negativos +-------+-------+ Verdaderos + 12 + 432 + +-------+-------+ Falsos + 0 + 36 + +-------+-------+ Especificidad: 1.0 Exactitud: 0.925 Sensibilidad: 0.25 Precisión: 1.0 Cluster 10 - Clase mayoritaria '3' Positivos-Negativos +-------+-------+ Verdaderos + 10 + 420 + +-------+-------+ Falsos + 12 + 38 + +-------+-------+ Especificidad: 0.9722222222222222 Exactitud: 0.8958333333333334 Sensibilidad: 0.20833333333333334 Precisión: 0.45454545454545453 Cluster 11 - Clase mayoritaria '4' Positivos-Negativos +-------+-------+ Verdaderos + 7 + 430 + +-------+-------+ Falsos + 2 + 41 + +-------+-------+ Especificidad: 0.9953703703703703 Exactitud: 0.9104166666666667 Sensibilidad: 0.14583333333333334 Precisión: 0.7777777777777778 Cluster 12 - Clase mayoritaria '0' Positivos-Negativos +-------+-------+ Verdaderos + 14 + 427 + +-------+-------+ Falsos + 5 + 34 + +-------+-------+ Especificidad: 0.9884259259259259 Exactitud: 0.91875 Sensibilidad: 0.2916666666666667 Precisión: 0.7368421052631579 Cluster 13 - Clase mayoritaria '3' Positivos-Negativos +-------+-------+ Verdaderos + 18 + 421 + +-------+-------+ Falsos + 11 + 30 + +-------+-------+ Especificidad: 0.9745370370370371 Exactitud: 0.9145833333333333 Sensibilidad: 0.375 Precisión: 0.6206896551724138 Cluster 14 - Clase mayoritaria '6' Positivos-Negativos +-------+-------+ Verdaderos + 30 + 429 + +-------+-------+ Falsos + 3 + 18 + +-------+-------+ Especificidad: 0.9930555555555556 Exactitud: 0.95625 Sensibilidad: 0.625 Precisión: 0.9090909090909091 Cluster 15 - Clase mayoritaria '5' Positivos-Negativos +-------+-------+ Verdaderos + 6 + 430 + +-------+-------+ Falsos + 2 + 42 + +-------+-------+ Especificidad: 0.9953703703703703 Exactitud: 0.9083333333333333 Sensibilidad: 0.125 Precisión: 0.75 Cluster 16 - Clase mayoritaria '4' Positivos-Negativos +-------+-------+ Verdaderos + 29 + 422 + +-------+-------+ Falsos + 10 + 19 + +-------+-------+ Especificidad: 0.9768518518518519 Exactitud: 0.9395833333333333 Sensibilidad: 0.6041666666666666 Precisión: 0.7435897435897436 Cluster 17 - Clase mayoritaria '3' Positivos-Negativos +-------+-------+ Verdaderos + 15 + 414 + +-------+-------+ Falsos + 18 + 33 + +-------+-------+ Especificidad: 0.9583333333333334 Exactitud: 0.89375 Sensibilidad: 0.3125 Precisión: 0.45454545454545453 Cluster 18 - Clase mayoritaria '2' Positivos-Negativos +-------+-------+ Verdaderos + 27 + 428 + +-------+-------+ Falsos + 4 + 21 + +-------+-------+ Especificidad: 0.9907407407407407 Exactitud: 0.9479166666666666 Sensibilidad: 0.5625 Precisión: 0.8709677419354839
matrices, _ = utils.test_KMeans(19, nums)
utils.tablas_matriz_confusion(matrices)
Cluster 1 - Clase mayoritaria '7' Positivos-Negativos +-------+-------+ Verdaderos + 28 + 428 + +-------+-------+ Falsos + 4 + 20 + +-------+-------+ Especificidad: 0.9907407407407407 Exactitud: 0.95 Sensibilidad: 0.5833333333333334 Precisión: 0.875 Cluster 2 - Clase mayoritaria '0' Positivos-Negativos +-------+-------+ Verdaderos + 7 + 432 + +-------+-------+ Falsos + 0 + 41 + +-------+-------+ Especificidad: 1.0 Exactitud: 0.9145833333333333 Sensibilidad: 0.14583333333333334 Precisión: 1.0 Cluster 3 - Clase mayoritaria '0' Positivos-Negativos +-------+-------+ Verdaderos + 21 + 429 + +-------+-------+ Falsos + 3 + 27 + +-------+-------+ Especificidad: 0.9930555555555556 Exactitud: 0.9375 Sensibilidad: 0.4375 Precisión: 0.875 Cluster 4 - Clase mayoritaria '7' Positivos-Negativos +-------+-------+ Verdaderos + 4 + 421 + +-------+-------+ Falsos + 11 + 44 + +-------+-------+ Especificidad: 0.9745370370370371 Exactitud: 0.8854166666666666 Sensibilidad: 0.08333333333333333 Precisión: 0.26666666666666666 Cluster 5 - Clase mayoritaria '5' Positivos-Negativos +-------+-------+ Verdaderos + 14 + 429 + +-------+-------+ Falsos + 3 + 34 + +-------+-------+ Especificidad: 0.9930555555555556 Exactitud: 0.9229166666666667 Sensibilidad: 0.2916666666666667 Precisión: 0.8235294117647058 Cluster 6 - Clase mayoritaria '6' Positivos-Negativos +-------+-------+ Verdaderos + 32 + 426 + +-------+-------+ Falsos + 6 + 16 + +-------+-------+ Especificidad: 0.9861111111111112 Exactitud: 0.9541666666666667 Sensibilidad: 0.6666666666666666 Precisión: 0.8421052631578947 Cluster 7 - Clase mayoritaria '4' Positivos-Negativos +-------+-------+ Verdaderos + 37 + 422 + +-------+-------+ Falsos + 10 + 11 + +-------+-------+ Especificidad: 0.9768518518518519 Exactitud: 0.95625 Sensibilidad: 0.7708333333333334 Precisión: 0.7872340425531915 Cluster 8 - Clase mayoritaria '9' Positivos-Negativos +-------+-------+ Verdaderos + 31 + 426 + +-------+-------+ Falsos + 6 + 17 + +-------+-------+ Especificidad: 0.9861111111111112 Exactitud: 0.9520833333333333 Sensibilidad: 0.6458333333333334 Precisión: 0.8378378378378378 Cluster 9 - Clase mayoritaria '7' Positivos-Negativos +-------+-------+ Verdaderos + 7 + 430 + +-------+-------+ Falsos + 2 + 41 + +-------+-------+ Especificidad: 0.9953703703703703 Exactitud: 0.9104166666666667 Sensibilidad: 0.14583333333333334 Precisión: 0.7777777777777778 Cluster 10 - Clase mayoritaria '3' Positivos-Negativos +-------+-------+ Verdaderos + 14 + 423 + +-------+-------+ Falsos + 9 + 34 + +-------+-------+ Especificidad: 0.9791666666666666 Exactitud: 0.9104166666666667 Sensibilidad: 0.2916666666666667 Precisión: 0.6086956521739131 Cluster 11 - Clase mayoritaria '0' Positivos-Negativos +-------+-------+ Verdaderos + 13 + 432 + +-------+-------+ Falsos + 0 + 35 + +-------+-------+ Especificidad: 1.0 Exactitud: 0.9270833333333334 Sensibilidad: 0.2708333333333333 Precisión: 1.0 Cluster 12 - Clase mayoritaria '8' Positivos-Negativos +-------+-------+ Verdaderos + 28 + 427 + +-------+-------+ Falsos + 5 + 20 + +-------+-------+ Especificidad: 0.9884259259259259 Exactitud: 0.9479166666666666 Sensibilidad: 0.5833333333333334 Precisión: 0.8484848484848485 Cluster 13 - Clase mayoritaria '1' Positivos-Negativos +-------+-------+ Verdaderos + 37 + 395 + +-------+-------+ Falsos + 37 + 11 + +-------+-------+ Especificidad: 0.9143518518518519 Exactitud: 0.9 Sensibilidad: 0.7708333333333334 Precisión: 0.5 Cluster 14 - Clase mayoritaria '3' Positivos-Negativos +-------+-------+ Verdaderos + 2 + 431 + +-------+-------+ Falsos + 1 + 46 + +-------+-------+ Especificidad: 0.9976851851851852 Exactitud: 0.9020833333333333 Sensibilidad: 0.041666666666666664 Precisión: 0.6666666666666666 Cluster 15 - Clase mayoritaria '0' Positivos-Negativos +-------+-------+ Verdaderos + 6 + 428 + +-------+-------+ Falsos + 4 + 42 + +-------+-------+ Especificidad: 0.9907407407407407 Exactitud: 0.9041666666666667 Sensibilidad: 0.125 Precisión: 0.6 Cluster 16 - Clase mayoritaria '3' Positivos-Negativos +-------+-------+ Verdaderos + 21 + 428 + +-------+-------+ Falsos + 4 + 27 + +-------+-------+ Especificidad: 0.9907407407407407 Exactitud: 0.9354166666666667 Sensibilidad: 0.4375 Precisión: 0.84 Cluster 17 - Clase mayoritaria '5' Positivos-Negativos +-------+-------+ Verdaderos + 10 + 427 + +-------+-------+ Falsos + 5 + 38 + +-------+-------+ Especificidad: 0.9884259259259259 Exactitud: 0.9104166666666667 Sensibilidad: 0.20833333333333334 Precisión: 0.6666666666666666 Cluster 18 - Clase mayoritaria '2' Positivos-Negativos +-------+-------+ Verdaderos + 29 + 428 + +-------+-------+ Falsos + 4 + 19 + +-------+-------+ Especificidad: 0.9907407407407407 Exactitud: 0.9520833333333333 Sensibilidad: 0.6041666666666666 Precisión: 0.8787878787878788 Cluster 19 - Clase mayoritaria '8' Positivos-Negativos +-------+-------+ Verdaderos + 7 + 414 + +-------+-------+ Falsos + 18 + 41 + +-------+-------+ Especificidad: 0.9583333333333334 Exactitud: 0.8770833333333333 Sensibilidad: 0.14583333333333334 Precisión: 0.28
matrices_propia_20, centroides_propia_20 = utils.test_KMeans(20, nums)
utils.tablas_matriz_confusion(matrices_propia_20)
Cluster 1 - Clase mayoritaria '6' Positivos-Negativos +-------+-------+ Verdaderos + 11 + 427 + +-------+-------+ Falsos + 5 + 37 + +-------+-------+ Especificidad: 0.9884259259259259 Exactitud: 0.9125 Sensibilidad: 0.22916666666666666 Precisión: 0.6875 Cluster 2 - Clase mayoritaria '9' Positivos-Negativos +-------+-------+ Verdaderos + 24 + 431 + +-------+-------+ Falsos + 1 + 24 + +-------+-------+ Especificidad: 0.9976851851851852 Exactitud: 0.9479166666666666 Sensibilidad: 0.5 Precisión: 0.96 Cluster 3 - Clase mayoritaria '6' Positivos-Negativos +-------+-------+ Verdaderos + 30 + 427 + +-------+-------+ Falsos + 5 + 18 + +-------+-------+ Especificidad: 0.9884259259259259 Exactitud: 0.9520833333333333 Sensibilidad: 0.625 Precisión: 0.8571428571428571 Cluster 4 - Clase mayoritaria '7' Positivos-Negativos +-------+-------+ Verdaderos + 17 + 410 + +-------+-------+ Falsos + 22 + 31 + +-------+-------+ Especificidad: 0.9490740740740741 Exactitud: 0.8895833333333333 Sensibilidad: 0.3541666666666667 Precisión: 0.4358974358974359 Cluster 5 - Clase mayoritaria '7' Positivos-Negativos +-------+-------+ Verdaderos + 26 + 432 + +-------+-------+ Falsos + 0 + 22 + +-------+-------+ Especificidad: 1.0 Exactitud: 0.9541666666666667 Sensibilidad: 0.5416666666666666 Precisión: 1.0 Cluster 6 - Clase mayoritaria '3' Positivos-Negativos +-------+-------+ Verdaderos + 15 + 416 + +-------+-------+ Falsos + 16 + 33 + +-------+-------+ Especificidad: 0.9629629629629629 Exactitud: 0.8979166666666667 Sensibilidad: 0.3125 Precisión: 0.4838709677419355 Cluster 7 - Clase mayoritaria '0' Positivos-Negativos +-------+-------+ Verdaderos + 24 + 425 + +-------+-------+ Falsos + 7 + 24 + +-------+-------+ Especificidad: 0.9837962962962963 Exactitud: 0.9354166666666667 Sensibilidad: 0.5 Precisión: 0.7741935483870968 Cluster 8 - Clase mayoritaria '5' Positivos-Negativos +-------+-------+ Verdaderos + 17 + 427 + +-------+-------+ Falsos + 5 + 31 + +-------+-------+ Especificidad: 0.9884259259259259 Exactitud: 0.925 Sensibilidad: 0.3541666666666667 Precisión: 0.7727272727272727 Cluster 9 - Clase mayoritaria '2' Positivos-Negativos +-------+-------+ Verdaderos + 7 + 419 + +-------+-------+ Falsos + 13 + 41 + +-------+-------+ Especificidad: 0.9699074074074074 Exactitud: 0.8875 Sensibilidad: 0.14583333333333334 Precisión: 0.35 Cluster 10 - Clase mayoritaria '4' Positivos-Negativos +-------+-------+ Verdaderos + 34 + 422 + +-------+-------+ Falsos + 10 + 14 + +-------+-------+ Especificidad: 0.9768518518518519 Exactitud: 0.95 Sensibilidad: 0.7083333333333334 Precisión: 0.7727272727272727 Cluster 11 - Clase mayoritaria '0' Positivos-Negativos +-------+-------+ Verdaderos + 7 + 431 + +-------+-------+ Falsos + 1 + 41 + +-------+-------+ Especificidad: 0.9976851851851852 Exactitud: 0.9125 Sensibilidad: 0.14583333333333334 Precisión: 0.875 Cluster 12 - Clase mayoritaria '5' Positivos-Negativos +-------+-------+ Verdaderos + 5 + 427 + +-------+-------+ Falsos + 5 + 43 + +-------+-------+ Especificidad: 0.9884259259259259 Exactitud: 0.9 Sensibilidad: 0.10416666666666667 Precisión: 0.5 Cluster 13 - Clase mayoritaria '8' Positivos-Negativos +-------+-------+ Verdaderos + 19 + 421 + +-------+-------+ Falsos + 11 + 29 + +-------+-------+ Especificidad: 0.9745370370370371 Exactitud: 0.9166666666666666 Sensibilidad: 0.3958333333333333 Precisión: 0.6333333333333333 Cluster 14 - Clase mayoritaria '3' Positivos-Negativos +-------+-------+ Verdaderos + 12 + 430 + +-------+-------+ Falsos + 2 + 36 + +-------+-------+ Especificidad: 0.9953703703703703 Exactitud: 0.9208333333333333 Sensibilidad: 0.25 Precisión: 0.8571428571428571 Cluster 15 - Clase mayoritaria '1' Positivos-Negativos +-------+-------+ Verdaderos + 21 + 412 + +-------+-------+ Falsos + 20 + 27 + +-------+-------+ Especificidad: 0.9537037037037037 Exactitud: 0.9020833333333333 Sensibilidad: 0.4375 Precisión: 0.5121951219512195 Cluster 16 - Clase mayoritaria '5' Positivos-Negativos +-------+-------+ Verdaderos + 6 + 428 + +-------+-------+ Falsos + 4 + 42 + +-------+-------+ Especificidad: 0.9907407407407407 Exactitud: 0.9041666666666667 Sensibilidad: 0.125 Precisión: 0.6 Cluster 17 - Clase mayoritaria '1' Positivos-Negativos +-------+-------+ Verdaderos + 18 + 416 + +-------+-------+ Falsos + 16 + 30 + +-------+-------+ Especificidad: 0.9629629629629629 Exactitud: 0.9041666666666667 Sensibilidad: 0.375 Precisión: 0.5294117647058824 Cluster 18 - Clase mayoritaria '3' Positivos-Negativos +-------+-------+ Verdaderos + 2 + 431 + +-------+-------+ Falsos + 1 + 46 + +-------+-------+ Especificidad: 0.9976851851851852 Exactitud: 0.9020833333333333 Sensibilidad: 0.041666666666666664 Precisión: 0.6666666666666666 Cluster 19 - Clase mayoritaria '2' Positivos-Negativos +-------+-------+ Verdaderos + 24 + 429 + +-------+-------+ Falsos + 3 + 24 + +-------+-------+ Especificidad: 0.9930555555555556 Exactitud: 0.94375 Sensibilidad: 0.5 Precisión: 0.8888888888888888 Cluster 20 - Clase mayoritaria '0' Positivos-Negativos +-------+-------+ Verdaderos + 14 + 432 + +-------+-------+ Falsos + 0 + 34 + +-------+-------+ Especificidad: 1.0 Exactitud: 0.9291666666666667 Sensibilidad: 0.2916666666666667 Precisión: 1.0
Se puede ver que aunque se aumente el número de clusters, esto no significa que se vayan a reconocer todos los números. Por ejemplo el número 5 es un número que no siempre se reconoce. Lo que se sucede es que hay números que aparecen más, como por ejemplo 0. Cuando usamos 10 clusters era más común ver que solo se repetía un número en un único cluster, bien, pues ahora eso no sucede. Hay casos en los que incluso un número se llega a repetir en 3 clusters distintos.
Podemos decir que, aumentar el número de clusters no implica que todos los números vayan a tener un cluster asociado, todo lo contrario, nos daríamos cuenta de que hay números "egoístas" que aparecen en varios clusters.
Se van ahora a comparar los resultados de nuestra implementación con los de la librería SKLearn.
errorMedioPimaVC_SK, errorMedioPimaVS_SK, errorMedioWDBCVC_SK, errorMedioWDBCVS_SK = utils.knn_test_SK(pima, wdbc)
Test K=1 K-NN SKLearn SIN NORMALIZAR Pima - Error WDBC - Error Validación Simple 25% 0.341146 0.075175 Validación Cruzada K-Folds=4 0.326823 0.089579 Validación Simple 20% 0.337662 0.094737 Validación Cruzada K-Folds=6 0.334635 0.084323 Validación Simple 15% 0.340517 0.079457 Validación Cruzada K-Folds=8 0.329427 0.087881 Validación Simple 10% 0.315584 0.073684 Validación Cruzada K-Folds=10 0.320335 0.084305 ================================================================================ Test K=3 K-NN SKLearn SIN NORMALIZAR Pima - Error WDBC - Error Validación Simple 25% 0.313802 0.068182 Validación Cruzada K-Folds=4 0.294271 0.073747 Validación Simple 20% 0.318182 0.080702 Validación Cruzada K-Folds=6 0.289062 0.073834 Validación Simple 15% 0.295977 0.065891 Validación Cruzada K-Folds=8 0.286458 0.077318 Validación Simple 10% 0.290909 0.057895 Validación Cruzada K-Folds=10 0.296941 0.073810 ================================================================================ Test K=5 K-NN SKLearn SIN NORMALIZAR Pima - Error WDBC - Error Validación Simple 25% 0.311198 0.068182 Validación Cruzada K-Folds=4 0.287760 0.072011 Validación Simple 20% 0.298701 0.064912 Validación Cruzada K-Folds=6 0.279948 0.075551 Validación Simple 15% 0.288793 0.060078 Validación Cruzada K-Folds=8 0.279948 0.072036 Validación Simple 10% 0.298701 0.078947 Validación Cruzada K-Folds=10 0.278623 0.070238 ================================================================================ Test K=7 K-NN SKLearn SIN NORMALIZAR Pima - Error WDBC - Error Validación Simple 25% 0.270833 0.082168 Validación Cruzada K-Folds=4 0.268229 0.073759 Validación Simple 20% 0.284416 0.068421 Validación Cruzada K-Folds=6 0.274740 0.075551 Validación Simple 15% 0.277299 0.073643 Validación Cruzada K-Folds=8 0.263021 0.073821 Validación Simple 10% 0.272727 0.063158 Validación Cruzada K-Folds=10 0.260373 0.072024 ================================================================================ Test K=9 K-NN SKLearn SIN NORMALIZAR Pima - Error WDBC - Error Validación Simple 25% 0.268229 0.066434 Validación Cruzada K-Folds=4 0.260417 0.071986 Validación Simple 20% 0.284416 0.068421 Validación Cruzada K-Folds=6 0.265625 0.073778 Validación Simple 15% 0.262931 0.054264 Validación Cruzada K-Folds=8 0.256510 0.071987 Validación Simple 10% 0.264935 0.064912 Validación Cruzada K-Folds=10 0.261654 0.073747 ================================================================================ Test K=11 K-NN SKLearn SIN NORMALIZAR Pima - Error WDBC - Error Validación Simple 25% 0.246094 0.083916 Validación Cruzada K-Folds=4 0.263021 0.066717 Validación Simple 20% 0.262338 0.068421 Validación Cruzada K-Folds=6 0.261719 0.066741 Validación Simple 15% 0.283046 0.073643 Validación Cruzada K-Folds=8 0.250000 0.070227 Validación Simple 10% 0.292208 0.084211 Validación Cruzada K-Folds=10 0.263055 0.070238 ================================================================================ Test K=13 K-NN SKLearn SIN NORMALIZAR Pima - Error WDBC - Error Validación Simple 25% 0.255208 0.066434 Validación Cruzada K-Folds=4 0.255208 0.066704 Validación Simple 20% 0.248052 0.064912 Validación Cruzada K-Folds=6 0.260417 0.068514 Validación Simple 15% 0.280172 0.067829 Validación Cruzada K-Folds=8 0.243490 0.068466 Validación Simple 10% 0.246753 0.075439 Validación Cruzada K-Folds=10 0.257792 0.068484 ================================================================================ Test K=15 K-NN SKLearn SIN NORMALIZAR Pima - Error WDBC - Error Validación Simple 25% 0.274740 0.061189 Validación Cruzada K-Folds=4 0.270833 0.068453 Validación Simple 20% 0.274026 0.089474 Validación Cruzada K-Folds=6 0.255208 0.070250 Validación Simple 15% 0.274425 0.062016 Validación Cruzada K-Folds=8 0.244792 0.071987 Validación Simple 10% 0.277922 0.059649 Validación Cruzada K-Folds=10 0.255195 0.070238 ================================================================================ Test K=17 K-NN SKLearn SIN NORMALIZAR Pima - Error WDBC - Error Validación Simple 25% 0.260417 0.082168 Validación Cruzada K-Folds=4 0.252604 0.070213 Validación Simple 20% 0.235065 0.073684 Validación Cruzada K-Folds=6 0.255208 0.070269 Validación Simple 15% 0.251437 0.069767 Validación Cruzada K-Folds=8 0.247396 0.068466 Validación Simple 10% 0.241558 0.091228 Validación Cruzada K-Folds=10 0.244703 0.070238 ================================================================================ Test K=19 K-NN SKLearn SIN NORMALIZAR Pima - Error WDBC - Error Validación Simple 25% 0.250000 0.061189 Validación Cruzada K-Folds=4 0.259115 0.073734 Validación Simple 20% 0.242857 0.070175 Validación Cruzada K-Folds=6 0.248698 0.072023 Validación Simple 15% 0.271552 0.063953 Validación Cruzada K-Folds=8 0.243490 0.070227 Validación Simple 10% 0.255844 0.070175 Validación Cruzada K-Folds=10 0.252529 0.068484 ================================================================================ Test K=21 K-NN SKLearn SIN NORMALIZAR Pima - Error WDBC - Error Validación Simple 25% 0.263021 0.064685 Validación Cruzada K-Folds=4 0.268229 0.070226 Validación Simple 20% 0.289610 0.080702 Validación Cruzada K-Folds=6 0.251302 0.079041 Validación Simple 15% 0.254310 0.079457 Validación Cruzada K-Folds=8 0.246094 0.073748 Validación Simple 10% 0.248052 0.078947 Validación Cruzada K-Folds=10 0.249932 0.070238 ================================================================================ Test K=23 K-NN SKLearn SIN NORMALIZAR Pima - Error WDBC - Error Validación Simple 25% 0.255208 0.090909 Validación Cruzada K-Folds=4 0.272135 0.073734 Validación Simple 20% 0.275325 0.078947 Validación Cruzada K-Folds=6 0.268229 0.079041 Validación Simple 15% 0.255747 0.081395 Validación Cruzada K-Folds=8 0.251302 0.071987 Validación Simple 10% 0.248052 0.068421 Validación Cruzada K-Folds=10 0.252478 0.071992 ================================================================================ Test K=25 K-NN SKLearn SIN NORMALIZAR Pima - Error WDBC - Error Validación Simple 25% 0.236979 0.069930 Validación Cruzada K-Folds=4 0.276042 0.080727 Validación Simple 20% 0.258442 0.080702 Validación Cruzada K-Folds=6 0.273438 0.080795 Validación Simple 15% 0.277299 0.100775 Validación Cruzada K-Folds=8 0.261719 0.073748 Validación Simple 10% 0.233766 0.066667 Validación Cruzada K-Folds=10 0.253794 0.071992 ================================================================================ Test K=27 K-NN SKLearn SIN NORMALIZAR Pima - Error WDBC - Error Validación Simple 25% 0.252604 0.064685 Validación Cruzada K-Folds=4 0.269531 0.078979 Validación Simple 20% 0.248052 0.092982 Validación Cruzada K-Folds=6 0.268229 0.084323 Validación Simple 15% 0.272989 0.089147 Validación Cruzada K-Folds=8 0.259115 0.075509 Validación Simple 10% 0.236364 0.085965 Validación Cruzada K-Folds=10 0.262919 0.075501 ================================================================================ Test K=29 K-NN SKLearn SIN NORMALIZAR Pima - Error WDBC - Error Validación Simple 25% 0.257812 0.071678 Validación Cruzada K-Folds=4 0.272135 0.080740 Validación Simple 20% 0.251948 0.075439 Validación Cruzada K-Folds=6 0.268229 0.086096 Validación Simple 15% 0.251437 0.071705 Validación Cruzada K-Folds=8 0.265625 0.077269 Validación Simple 10% 0.241558 0.084211 Validación Cruzada K-Folds=10 0.268148 0.077287 ================================================================================ Test K=31 K-NN SKLearn SIN NORMALIZAR Pima - Error WDBC - Error Validación Simple 25% 0.276042 0.064685 Validación Cruzada K-Folds=4 0.273438 0.080727 Validación Simple 20% 0.259740 0.084211 Validación Cruzada K-Folds=6 0.264323 0.086114 Validación Simple 15% 0.278736 0.079457 Validación Cruzada K-Folds=8 0.261719 0.080790 Validación Simple 10% 0.267532 0.070175 Validación Cruzada K-Folds=10 0.265550 0.079073 ================================================================================ Test K=33 K-NN SKLearn SIN NORMALIZAR Pima - Error WDBC - Error Validación Simple 25% 0.255208 0.087413 Validación Cruzada K-Folds=4 0.276042 0.084236 Validación Simple 20% 0.253247 0.080702 Validación Cruzada K-Folds=6 0.255208 0.087850 Validación Simple 15% 0.277299 0.094961 Validación Cruzada K-Folds=8 0.255208 0.082551 Validación Simple 10% 0.231169 0.094737 Validación Cruzada K-Folds=10 0.262936 0.079073 ================================================================================ Test K=35 K-NN SKLearn SIN NORMALIZAR Pima - Error WDBC - Error Validación Simple 25% 0.250000 0.104895 Validación Cruzada K-Folds=4 0.266927 0.082476 Validación Simple 20% 0.272727 0.094737 Validación Cruzada K-Folds=6 0.264323 0.089623 Validación Simple 15% 0.294540 0.077519 Validación Cruzada K-Folds=8 0.251302 0.080790 Validación Simple 10% 0.259740 0.078947 Validación Cruzada K-Folds=10 0.257758 0.079073 ================================================================================
errorMedioPimaVCNorm_SK, errorMedioPimaVSNorm_SK, errorMedioWDBCVCNorm_SK, errorMedioWDBCVSNorm_SK = utils.knn_test_norm_SK(pima, wdbc)
Test K=1 K-NN SKLearn NORMALIZANDO Pima - Error WDBC - Error Validación Simple 25% 0.388021 0.286713 Validación Cruzada K-Folds=4 0.402344 0.311152 Validación Simple 20% 0.394805 0.291228 Validación Cruzada K-Folds=6 0.401042 0.305916 Validación Simple 15% 0.393678 0.333333 Validación Cruzada K-Folds=8 0.393229 0.307707 Validación Simple 10% 0.374026 0.315789 Validación Cruzada K-Folds=10 0.393233 0.302475 ================================================================================ Test K=3 K-NN SKLearn NORMALIZANDO Pima - Error WDBC - Error Validación Simple 25% 0.399740 0.321678 Validación Cruzada K-Folds=4 0.401042 0.291736 Validación Simple 20% 0.393506 0.314035 Validación Cruzada K-Folds=6 0.398438 0.291844 Validación Simple 15% 0.406609 0.273256 Validación Cruzada K-Folds=8 0.404948 0.284869 Validación Simple 10% 0.381818 0.277193 Validación Cruzada K-Folds=10 0.406254 0.286654 ================================================================================ Test K=5 K-NN SKLearn NORMALIZANDO Pima - Error WDBC - Error Validación Simple 25% 0.384115 0.307692 Validación Cruzada K-Folds=4 0.361979 0.298840 Validación Simple 20% 0.366234 0.296491 Validación Cruzada K-Folds=6 0.371094 0.307652 Validación Simple 15% 0.385057 0.323643 Validación Cruzada K-Folds=8 0.375000 0.298929 Validación Simple 10% 0.376623 0.317544 Validación Cruzada K-Folds=10 0.378828 0.298872 ================================================================================ Test K=7 K-NN SKLearn NORMALIZANDO Pima - Error WDBC - Error Validación Simple 25% 0.369792 0.312937 Validación Cruzada K-Folds=4 0.360677 0.304122 Validación Simple 20% 0.351948 0.329825 Validación Cruzada K-Folds=6 0.368490 0.307671 Validación Simple 15% 0.346264 0.306202 Validación Cruzada K-Folds=8 0.365885 0.302499 Validación Simple 10% 0.387013 0.331579 Validación Cruzada K-Folds=10 0.363141 0.307707 ================================================================================ Test K=9 K-NN SKLearn NORMALIZANDO Pima - Error WDBC - Error Validación Simple 25% 0.352865 0.305944 Validación Cruzada K-Folds=4 0.372396 0.302300 Validación Simple 20% 0.362338 0.319298 Validación Cruzada K-Folds=6 0.371094 0.309369 Validación Simple 15% 0.397989 0.337209 Validación Cruzada K-Folds=8 0.376302 0.298929 Validación Simple 10% 0.371429 0.324561 Validación Cruzada K-Folds=10 0.364474 0.297024 ================================================================================ Test K=11 K-NN SKLearn NORMALIZANDO Pima - Error WDBC - Error Validación Simple 25% 0.367188 0.312937 Validación Cruzada K-Folds=4 0.382812 0.311066 Validación Simple 20% 0.344156 0.285965 Validación Cruzada K-Folds=6 0.376302 0.311161 Validación Simple 15% 0.367816 0.306202 Validación Cruzada K-Folds=8 0.377604 0.305922 Validación Simple 10% 0.362338 0.310526 Validación Cruzada K-Folds=10 0.367139 0.309367 ================================================================================ Test K=13 K-NN SKLearn NORMALIZANDO Pima - Error WDBC - Error Validación Simple 25% 0.354167 0.314685 Validación Cruzada K-Folds=4 0.377604 0.318120 Validación Simple 20% 0.358442 0.321053 Validación Cruzada K-Folds=6 0.372396 0.309369 Validación Simple 15% 0.359195 0.290698 Validación Cruzada K-Folds=8 0.377604 0.314823 Validación Simple 10% 0.353247 0.317544 Validación Cruzada K-Folds=10 0.374932 0.311122 ================================================================================ Test K=15 K-NN SKLearn NORMALIZANDO Pima - Error WDBC - Error Validación Simple 25% 0.338542 0.305944 Validación Cruzada K-Folds=4 0.368490 0.323402 Validación Simple 20% 0.371429 0.347368 Validación Cruzada K-Folds=6 0.361979 0.319933 Validación Simple 15% 0.382184 0.350775 Validación Cruzada K-Folds=8 0.365885 0.313013 Validación Simple 10% 0.332468 0.310526 Validación Cruzada K-Folds=10 0.375000 0.304104 ================================================================================ Test K=17 K-NN SKLearn NORMALIZANDO Pima - Error WDBC - Error Validación Simple 25% 0.355469 0.298951 Validación Cruzada K-Folds=4 0.358073 0.319881 Validación Simple 20% 0.337662 0.305263 Validación Cruzada K-Folds=6 0.364583 0.319933 Validación Simple 15% 0.369253 0.302326 Validación Cruzada K-Folds=8 0.351562 0.318295 Validación Simple 10% 0.385714 0.319298 Validación Cruzada K-Folds=10 0.351555 0.319925 ================================================================================ Test K=19 K-NN SKLearn NORMALIZANDO Pima - Error WDBC - Error Validación Simple 25% 0.354167 0.300699 Validación Cruzada K-Folds=4 0.359375 0.323414 Validación Simple 20% 0.342857 0.349123 Validación Cruzada K-Folds=6 0.358073 0.323442 Validación Simple 15% 0.393678 0.358527 Validación Cruzada K-Folds=8 0.356771 0.313013 Validación Simple 10% 0.348052 0.287719 Validación Cruzada K-Folds=10 0.356750 0.312845 ================================================================================ Test K=21 K-NN SKLearn NORMALIZANDO Pima - Error WDBC - Error Validación Simple 25% 0.341146 0.304196 Validación Cruzada K-Folds=4 0.358073 0.325150 Validación Simple 20% 0.390909 0.315789 Validación Cruzada K-Folds=6 0.358073 0.332176 Validación Simple 15% 0.399425 0.306202 Validación Cruzada K-Folds=8 0.352865 0.319982 Validación Simple 10% 0.353247 0.300000 Validación Cruzada K-Folds=10 0.352871 0.318139 ================================================================================ Test K=23 K-NN SKLearn NORMALIZANDO Pima - Error WDBC - Error Validación Simple 25% 0.376302 0.323427 Validación Cruzada K-Folds=4 0.367188 0.340983 Validación Simple 20% 0.364935 0.284211 Validación Cruzada K-Folds=6 0.364583 0.337439 Validación Simple 15% 0.364943 0.341085 Validación Cruzada K-Folds=8 0.350260 0.320007 Validación Simple 10% 0.353247 0.322807 Validación Cruzada K-Folds=10 0.358134 0.326911 ================================================================================ Test K=25 K-NN SKLearn NORMALIZANDO Pima - Error WDBC - Error Validación Simple 25% 0.386719 0.340909 Validación Cruzada K-Folds=4 0.367188 0.321666 Validación Simple 20% 0.336364 0.322807 Validación Cruzada K-Folds=6 0.352865 0.330403 Validación Simple 15% 0.341954 0.296512 Validación Cruzada K-Folds=8 0.355469 0.327025 Validación Simple 10% 0.380519 0.307018 Validación Cruzada K-Folds=10 0.359398 0.330388 ================================================================================ Test K=27 K-NN SKLearn NORMALIZANDO Pima - Error WDBC - Error Validación Simple 25% 0.350260 0.332168 Validación Cruzada K-Folds=4 0.361979 0.330432 Validación Simple 20% 0.346753 0.333333 Validación Cruzada K-Folds=6 0.358073 0.326913 Validación Simple 15% 0.339080 0.300388 Validación Cruzada K-Folds=8 0.356771 0.323552 Validación Simple 10% 0.338961 0.331579 Validación Cruzada K-Folds=10 0.360714 0.332143 ================================================================================ Test K=29 K-NN SKLearn NORMALIZANDO Pima - Error WDBC - Error Validación Simple 25% 0.350260 0.318182 Validación Cruzada K-Folds=4 0.355469 0.332205 Validación Simple 20% 0.336364 0.301754 Validación Cruzada K-Folds=6 0.360677 0.339212 Validación Simple 15% 0.330460 0.333333 Validación Cruzada K-Folds=8 0.348958 0.328810 Validación Simple 10% 0.328571 0.345614 Validación Cruzada K-Folds=10 0.354187 0.328634 ================================================================================ Test K=31 K-NN SKLearn NORMALIZANDO Pima - Error WDBC - Error Validación Simple 25% 0.356771 0.314685 Validación Cruzada K-Folds=4 0.350260 0.328659 Validación Simple 20% 0.361039 0.329825 Validación Cruzada K-Folds=6 0.356771 0.333968 Validación Simple 15% 0.336207 0.321705 Validación Cruzada K-Folds=8 0.355469 0.314750 Validación Simple 10% 0.355844 0.285965 Validación Cruzada K-Folds=10 0.354170 0.321617 ================================================================================ Test K=33 K-NN SKLearn NORMALIZANDO Pima - Error WDBC - Error Validación Simple 25% 0.352865 0.328671 Validación Cruzada K-Folds=4 0.350260 0.318120 Validación Simple 20% 0.357143 0.331579 Validación Cruzada K-Folds=6 0.356771 0.337477 Validación Simple 15% 0.340517 0.364341 Validación Cruzada K-Folds=8 0.358073 0.319982 Validación Simple 10% 0.348052 0.310526 Validación Cruzada K-Folds=10 0.361979 0.328634 ================================================================================ Test K=35 K-NN SKLearn NORMALIZANDO Pima - Error WDBC - Error Validación Simple 25% 0.329427 0.325175 Validación Cruzada K-Folds=4 0.350260 0.323402 Validación Simple 20% 0.351948 0.315789 Validación Cruzada K-Folds=6 0.352865 0.325159 Validación Simple 15% 0.364943 0.310078 Validación Cruzada K-Folds=8 0.352865 0.316486 Validación Simple 10% 0.332468 0.305263 Validación Cruzada K-Folds=10 0.356750 0.328634 ================================================================================
utils.plot_VS(errorMedioPimaVS_SK, errorMedioPimaVSNorm_SK)
utils.plot_VC(errorMedioPimaVC_SK, errorMedioPimaVCNorm_SK)
utils.plot_VS(errorMedioWDBCVS_SK, errorMedioWDBCVSNorm_SK)
utils.plot_VC(errorMedioWDBCVC_SK, errorMedioWDBCVCNorm_SK)
A la primera conclusión a la que podemos llegar es que normalizar los datos empeora drásticamente el error cometido por el modelo. En estos gráficos si podemos ver una clara diferencia entre la normalización y la no-normalización.
En cuanto al valor de K, el punto más alto del error suele estár con K=1. También dependiendo del dataset, los valores optimos de K están entre 5-11 (en el caso de Pima-Indians-Diabetes) y 3-7 (en el caso de WDBC, aunque el error es muy uniforme).
utils.plot_VS_SK_Propio(errorMedioPimaVS, errorMedioPimaVSNorm, errorMedioPimaVS_SK, errorMedioPimaVSNorm_SK)
utils.plot_VC_SK_Propio(errorMedioPimaVC, errorMedioPimaVCNorm, errorMedioPimaVC_SK, errorMedioPimaVCNorm_SK)
utils.plot_VS_SK_Propio(errorMedioWDBCVS, errorMedioWDBCVSNorm, errorMedioWDBCVS_SK, errorMedioWDBCVSNorm_SK)
utils.plot_VC_SK_Propio(errorMedioWDBCVC, errorMedioWDBCVCNorm, errorMedioWDBCVC_SK, errorMedioWDBCVCNorm_SK)
Viendo los datos mostrados en las gráficas vemos que el clasificador de la librería SKLearn comete menos errores aunque, cuando se tratan datos normalizados la tasa de error es más pareja al modelo implementado en la práctica. En el dataset WDBC el error sigue siendo menor que el error en el modelo propio.
matrices_SK_10, centroides_SK_10 = utils.test_KMeans_SK(10, nums)
utils.tablas_matriz_confusion(matrices_SK_10)
Cluster 1 - Clase mayoritaria '0' Positivos-Negativos +-------+-------+ Verdaderos + 24 + 427 + +-------+-------+ Falsos + 5 + 24 + +-------+-------+ Especificidad: 0.9884259259259259 Exactitud: 0.9395833333333333 Sensibilidad: 0.5 Precisión: 0.8275862068965517 Cluster 2 - Clase mayoritaria '3' Positivos-Negativos +-------+-------+ Verdaderos + 33 + 402 + +-------+-------+ Falsos + 30 + 15 + +-------+-------+ Especificidad: 0.9305555555555556 Exactitud: 0.90625 Sensibilidad: 0.6875 Precisión: 0.5238095238095238 Cluster 3 - Clase mayoritaria '1' Positivos-Negativos +-------+-------+ Verdaderos + 34 + 388 + +-------+-------+ Falsos + 44 + 14 + +-------+-------+ Especificidad: 0.8981481481481481 Exactitud: 0.8791666666666667 Sensibilidad: 0.7083333333333334 Precisión: 0.4358974358974359 Cluster 4 - Clase mayoritaria '7' Positivos-Negativos +-------+-------+ Verdaderos + 35 + 416 + +-------+-------+ Falsos + 16 + 13 + +-------+-------+ Especificidad: 0.9629629629629629 Exactitud: 0.9395833333333333 Sensibilidad: 0.7291666666666666 Precisión: 0.6862745098039216 Cluster 5 - Clase mayoritaria '2' Positivos-Negativos +-------+-------+ Verdaderos + 30 + 418 + +-------+-------+ Falsos + 14 + 18 + +-------+-------+ Especificidad: 0.9675925925925926 Exactitud: 0.9333333333333333 Sensibilidad: 0.625 Precisión: 0.6818181818181818 Cluster 6 - Clase mayoritaria '8' Positivos-Negativos +-------+-------+ Verdaderos + 28 + 417 + +-------+-------+ Falsos + 15 + 20 + +-------+-------+ Especificidad: 0.9652777777777778 Exactitud: 0.9270833333333334 Sensibilidad: 0.5833333333333334 Precisión: 0.6511627906976745 Cluster 7 - Clase mayoritaria '6' Positivos-Negativos +-------+-------+ Verdaderos + 32 + 413 + +-------+-------+ Falsos + 19 + 16 + +-------+-------+ Especificidad: 0.9560185185185185 Exactitud: 0.9270833333333334 Sensibilidad: 0.6666666666666666 Precisión: 0.6274509803921569 Cluster 8 - Clase mayoritaria '0' Positivos-Negativos +-------+-------+ Verdaderos + 21 + 432 + +-------+-------+ Falsos + 0 + 27 + +-------+-------+ Especificidad: 1.0 Exactitud: 0.94375 Sensibilidad: 0.4375 Precisión: 1.0 Cluster 9 - Clase mayoritaria '4' Positivos-Negativos +-------+-------+ Verdaderos + 39 + 412 + +-------+-------+ Falsos + 20 + 9 + +-------+-------+ Especificidad: 0.9537037037037037 Exactitud: 0.9395833333333333 Sensibilidad: 0.8125 Precisión: 0.6610169491525424 Cluster 10 - Clase mayoritaria '9' Positivos-Negativos +-------+-------+ Verdaderos + 27 + 418 + +-------+-------+ Falsos + 14 + 21 + +-------+-------+ Especificidad: 0.9675925925925926 Exactitud: 0.9270833333333334 Sensibilidad: 0.5625 Precisión: 0.6585365853658537
clusters = utils.create_clusters_for_comparing(matrices_propia_10, matrices_SK_10, 10)
utils.plot_SK_Propia_histograms_KMEANS(clusters, 10)
print("Distancia entre centroides - Propia VS SKLearn")
for a, b in zip(centroides_propia_10, centroides_SK_10):
print(f"{distanciaEuclidea(a[0], b):0.2f} ", end="")
Distancia entre centroides - Propia VS SKLearn 668.52 1559.70 161.80 1356.91 1066.04 1318.05 1219.19 186.03 214.16 1154.70
matrices_SK_20, centroides_SK_20 = utils.test_KMeans_SK(20, nums)
utils.tablas_matriz_confusion(matrices_SK_20)
Cluster 1 - Clase mayoritaria '8' Positivos-Negativos +-------+-------+ Verdaderos + 14 + 430 + +-------+-------+ Falsos + 2 + 34 + +-------+-------+ Especificidad: 0.9953703703703703 Exactitud: 0.925 Sensibilidad: 0.2916666666666667 Precisión: 0.875 Cluster 2 - Clase mayoritaria '1' Positivos-Negativos +-------+-------+ Verdaderos + 23 + 415 + +-------+-------+ Falsos + 17 + 25 + +-------+-------+ Especificidad: 0.9606481481481481 Exactitud: 0.9125 Sensibilidad: 0.4791666666666667 Precisión: 0.575 Cluster 3 - Clase mayoritaria '3' Positivos-Negativos +-------+-------+ Verdaderos + 10 + 418 + +-------+-------+ Falsos + 14 + 38 + +-------+-------+ Especificidad: 0.9675925925925926 Exactitud: 0.8916666666666667 Sensibilidad: 0.20833333333333334 Precisión: 0.4166666666666667 Cluster 4 - Clase mayoritaria '7' Positivos-Negativos +-------+-------+ Verdaderos + 17 + 423 + +-------+-------+ Falsos + 9 + 31 + +-------+-------+ Especificidad: 0.9791666666666666 Exactitud: 0.9166666666666666 Sensibilidad: 0.3541666666666667 Precisión: 0.6538461538461539 Cluster 5 - Clase mayoritaria '0' Positivos-Negativos +-------+-------+ Verdaderos + 20 + 432 + +-------+-------+ Falsos + 0 + 28 + +-------+-------+ Especificidad: 1.0 Exactitud: 0.9416666666666667 Sensibilidad: 0.4166666666666667 Precisión: 1.0 Cluster 6 - Clase mayoritaria '1' Positivos-Negativos +-------+-------+ Verdaderos + 17 + 418 + +-------+-------+ Falsos + 14 + 31 + +-------+-------+ Especificidad: 0.9675925925925926 Exactitud: 0.90625 Sensibilidad: 0.3541666666666667 Precisión: 0.5483870967741935 Cluster 7 - Clase mayoritaria '6' Positivos-Negativos +-------+-------+ Verdaderos + 21 + 432 + +-------+-------+ Falsos + 0 + 27 + +-------+-------+ Especificidad: 1.0 Exactitud: 0.94375 Sensibilidad: 0.4375 Precisión: 1.0 Cluster 8 - Clase mayoritaria '3' Positivos-Negativos +-------+-------+ Verdaderos + 31 + 420 + +-------+-------+ Falsos + 12 + 17 + +-------+-------+ Especificidad: 0.9722222222222222 Exactitud: 0.9395833333333333 Sensibilidad: 0.6458333333333334 Precisión: 0.7209302325581395 Cluster 9 - Clase mayoritaria '4' Positivos-Negativos +-------+-------+ Verdaderos + 31 + 423 + +-------+-------+ Falsos + 9 + 17 + +-------+-------+ Especificidad: 0.9791666666666666 Exactitud: 0.9458333333333333 Sensibilidad: 0.6458333333333334 Precisión: 0.775 Cluster 10 - Clase mayoritaria '0' Positivos-Negativos +-------+-------+ Verdaderos + 8 + 426 + +-------+-------+ Falsos + 6 + 40 + +-------+-------+ Especificidad: 0.9861111111111112 Exactitud: 0.9041666666666667 Sensibilidad: 0.16666666666666666 Precisión: 0.5714285714285714 Cluster 11 - Clase mayoritaria '7' Positivos-Negativos +-------+-------+ Verdaderos + 20 + 432 + +-------+-------+ Falsos + 0 + 28 + +-------+-------+ Especificidad: 1.0 Exactitud: 0.9416666666666667 Sensibilidad: 0.4166666666666667 Precisión: 1.0 Cluster 12 - Clase mayoritaria '2' Positivos-Negativos +-------+-------+ Verdaderos + 7 + 412 + +-------+-------+ Falsos + 20 + 41 + +-------+-------+ Especificidad: 0.9537037037037037 Exactitud: 0.8729166666666667 Sensibilidad: 0.14583333333333334 Precisión: 0.25925925925925924 Cluster 13 - Clase mayoritaria '6' Positivos-Negativos +-------+-------+ Verdaderos + 16 + 427 + +-------+-------+ Falsos + 5 + 32 + +-------+-------+ Especificidad: 0.9884259259259259 Exactitud: 0.9229166666666667 Sensibilidad: 0.3333333333333333 Precisión: 0.7619047619047619 Cluster 14 - Clase mayoritaria '5' Positivos-Negativos +-------+-------+ Verdaderos + 11 + 427 + +-------+-------+ Falsos + 5 + 37 + +-------+-------+ Especificidad: 0.9884259259259259 Exactitud: 0.9125 Sensibilidad: 0.22916666666666666 Precisión: 0.6875 Cluster 15 - Clase mayoritaria '0' Positivos-Negativos +-------+-------+ Verdaderos + 18 + 431 + +-------+-------+ Falsos + 1 + 30 + +-------+-------+ Especificidad: 0.9976851851851852 Exactitud: 0.9354166666666667 Sensibilidad: 0.375 Precisión: 0.9473684210526315 Cluster 16 - Clase mayoritaria '8' Positivos-Negativos +-------+-------+ Verdaderos + 14 + 425 + +-------+-------+ Falsos + 7 + 34 + +-------+-------+ Especificidad: 0.9837962962962963 Exactitud: 0.9145833333333333 Sensibilidad: 0.2916666666666667 Precisión: 0.6666666666666666 Cluster 17 - Clase mayoritaria '9' Positivos-Negativos +-------+-------+ Verdaderos + 23 + 428 + +-------+-------+ Falsos + 4 + 25 + +-------+-------+ Especificidad: 0.9907407407407407 Exactitud: 0.9395833333333333 Sensibilidad: 0.4791666666666667 Precisión: 0.8518518518518519 Cluster 18 - Clase mayoritaria '4' Positivos-Negativos +-------+-------+ Verdaderos + 9 + 418 + +-------+-------+ Falsos + 14 + 39 + +-------+-------+ Especificidad: 0.9675925925925926 Exactitud: 0.8895833333333333 Sensibilidad: 0.1875 Precisión: 0.391304347826087 Cluster 19 - Clase mayoritaria '2' Positivos-Negativos +-------+-------+ Verdaderos + 3 + 431 + +-------+-------+ Falsos + 1 + 45 + +-------+-------+ Especificidad: 0.9976851851851852 Exactitud: 0.9041666666666667 Sensibilidad: 0.0625 Precisión: 0.75 Cluster 20 - Clase mayoritaria '2' Positivos-Negativos +-------+-------+ Verdaderos + 26 + 431 + +-------+-------+ Falsos + 1 + 22 + +-------+-------+ Especificidad: 0.9976851851851852 Exactitud: 0.9520833333333333 Sensibilidad: 0.5416666666666666 Precisión: 0.9629629629629629
clusters = utils.create_clusters_for_comparing(matrices_propia_20, matrices_SK_20, 10)
utils.plot_SK_Propia_histograms_KMEANS(clusters, 10)
print("Distancia entre centroides - Propia VS SKLearn")
for a, b in zip(centroides_propia_20, centroides_SK_20):
print(f"{distanciaEuclidea(a[0], b):0.2f} ", end="")
Distancia entre centroides - Propia VS SKLearn 1471.40 1545.24 1397.25 364.70 2054.86 1231.15 1122.17 668.68 1586.54 1397.15 2386.75 1757.63 1624.54 1066.70 1700.54 1632.82 1075.89 2079.41 1906.25 1871.20
En estos histogramas se muestran los valores de cada parte de la matriz de confusión pero de ambas partes, de la implementación propia y de la implementación de la libreria de SKLearn.
El resultado tras ejecutar el algoritmo no siempre es el mismo por lo que no sería correcto fijarse unicamente en los gráficos mostrados. Aun así, los resultados resultan bastante parejos en los clusters que comparten clase mayoritaría. También es cierto que hay clases que solo uno de los dos reconoce.
No me atrvería a decir que una es mejor que la otra, simplemente diría que el resultado es similar aunque el tiempo de ejecución es bastante mejor en el clasificador de SKLearn.
Podemos concluir que el clasificador K-NN no tiene un K especifico donde se comporte mejor, depende de los datos, pero si podemos decir que valores como 1, no son útiles. La normalización de los datos no es la mejor idea ya que no presenta una mejora en el error.
También podemos decir que la validación cruzada (al menos en mi caso) no es la mejor opción para comprobar el comportamiento de K-NN.
En cuanto a K-Means, hemos visto que no siempre se van a reconocer todas las clases aunque K sea igual al número de clases, y que hacer K > nº de clases puede dar resultados peores ya que hay clases "egoistas" que abarcan más clusters.
Finalmente, hemos visto que la implementación de K-NN de SKLearn, si que tiene un comportamiento diferente cuando se pasan datos normalizados. Cuando se hace esto los resultados son peores. La implementación de SKLearn es mejor en general (en cuanto a tiempo y errores por lo menos).
La implementación de K-Means en SKLearn no tiene nada que envidiarle a la implementación propia, aunque es cierto que es superior en cuanto al coste temporal. Los resultados de ambas implementaciones son muy parejos.